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。