关闭

xml解析相关总结

标签: DOM解析xml解析
583人阅读 评论(5) 收藏 举报
分类:

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。







0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:38221次
    • 积分:522
    • 等级:
    • 排名:千里之外
    • 原创:17篇
    • 转载:3篇
    • 译文:0篇
    • 评论:8条
    最新评论