您的位置:首页 > 其它

xml解析相关总结

2013-12-03 17:04 344 查看

xml解析

//获得一个XML文件的解析器
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//解析XML文件生成DOM文档的接口类,以便访问DOM。
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse( new File(FileName) );
遍历DOM文档
//获得Root元素
Element root = document.getDocumentElement();
//获得Root元素的子节点列表
nodelist = root.getChildNodes();
或者通过标签来获得element
NodeList body = root.getElementsByTagName("body");
假设body下有很多子条目div,则可以一个个取出来单独解析。
<html>
<head>
</head>
<body>
<div name="1">
	<p id="path">TEMP</p>
	<p id ="title">....</p>
	<p id="summary">...</p>
	<a href="http://....">下载</a>
	</div>

	<div name="9">
		<p id="name">...</p>
		<p id='version'>100</p>
		<details>
			<summary>...</summary>
			<img src="http://....png" title="xx" />
			</details>
		<a href="http://..."title="url">下载</a>
	</div>
</body></html>
NodeList divs = ((Element) (body.item(0))).getElementsByTagName("div");
Element div = (Element) divs.item(i);
然后通过div.getAttribute("name")来获取div的属性,通过NodeList child = div.getElementsByTagName("p");来获取div的子条目<p>的element,并解析。
int len = child.getLength();
for (int i = 0; i < len; i++) {
Element p = (Element) child.item(i);
String idVal = p.getAttribute("id");
if (idVal.equals("name"))
	name = p.getTextContent();
if (idVal.equals("version"))
	version = p.getTextContent();
    ......
}

将DOM文档转化成XML文件

TransformerFactory tfactory = TransformerFactory.newInstance();
Transformer transformer = tfactory.newTransformer();
// 将DOM对象转化为DOMSource类对象,该对象表现为转化成别的表达形式的信息容器。
DOMSource source = new DOMSource(document);
// 获得一个StreamResult类对象,该对象是DOM文档转化成的其他形式的文档的容器,可以是XML文件,文本文件,HTML文件。这里为一个XML文件。
StreamResult result = new StreamResult(new File(“text.xml”));
// 调用API,将DOM文档转化成XML文件。
transformer.transform(source,result);
需要注意的是,document哪怕是整个xml文档的一部分,例如上例中的某个div,转换得到的仍是整个xml文档。这一块没有继续去看,不知道有没别的解决办法。

Document转化成String

DOMSource source = new DOMSource(doc);
StringWriter writer = new StringWriter();
Result result = new StreamResult(writer);
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(source, result);
String xml = writer.getBuffer().toString();

注:上述方法会返回整个xml的String。

xml转换成数据流

/**
  * 将一个字符串转化为输入流
  */
  public static InputStream getStringStream(String sInputString){
  if (sInputString != null && !sInputString.trim().equals("")){
  try{
  ByteArrayInputStream tInputStringStream = new ByteArrayInputStream(sInputString.getBytes());
  return tInputStringStream;
  }catch (Exception ex){
  ex.printStackTrace();
  }
  }
  return null;
  }
  /**
  * 将一个输入流转化为字符串
  */
  public static String getStreamString(InputStream tInputStream){
  if (tInputStream != null){
  try{
  BufferedReader tBufferedReader = new BufferedReader(new InputStreamReader(tInputStream, "UTF-8"));
  StringBuffer tStringBuffer = new StringBuffer();
  String sTempOneLine = new String("");
  while ((sTempOneLine = tBufferedReader.readLine()) != null){
  tStringBuffer.append(sTempOneLine);
  }
  return tStringBuffer.toString();
  }catch (Exception ex){
  ex.printStackTrace();
  }
  }
  return null;
  }

这样的话,就可以任意的使用xml,存储和解析xml。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: