xml文件在系统开发中是一种很常见的文件格式,特别是接口的报文规范通常采用XML格式。具有简单易懂的结构特点。因此对于XML的解析是比较基础的知识。一般框架会提供公用的XML解析工具类。下面是一个简单的XML解析示例。
示例使用的是org.w3c.dom解析,javax.xml.parsers.SAXParser也可以对XML文件进行解析,但是无法获取节点的上下级关系。特别注意的是org.w3c.dom在解析xml文件时它会将你的回车也作为一个节点。在你的代码中你打印nodeList.getLenth();得到的数值肯定比实际的节点要多。可以使用node instanceof 判断。
如果:node instanceof Text,则输出#text
如果:node instanceof Element,则输出实际节点。<span style="font-size:14px;">import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
try {
String xmlStr = "XML格式字符串";
Element element = null;
BufferedInputStream is = new BufferedInputStream(
new ByteArrayInputStream(xmlStr.getBytes("UTF-8")));
File xmlFile = new File("E:\\opt\\test.xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document dt = db.parse(</span><span style="font-size:14px;">xmlFile </span><span style="font-size:14px;">);//此处也可以传xml的字符串 is
// 得到一个elment根元素
element = dt.getDocumentElement();
// 获得根节点
System.out.println("根元素:" + element.getNodeName());
// 获得根元素下的子节点
NodeList childNodes = element.getChildNodes();
// 遍历这些子节点
for (int i = 0; i < childNodes.getLength(); i++) {
// 获得每个对应位置i的结点
Node node = childNodes.item(i);
if(node instanceof Element){
System.out.println("----一级子节点:"+node.getNodeName());
if(node.hasChildNodes()){
NodeList nodelist2 = node.getChildNodes();
for(int j = 0; j < nodelist2.getLength(); j++){
Node node2 = nodelist2.item(j);
if(node2 instanceof Element){
System.out.print("-----------二级子节点:"+node2.getNodeName());
System.out.print("------节点值:"+node2.getTextContent());
System.out.println("----父节点:"+node2.getParentNode().getNodeName());
}
}
}
}
}
}catch (Exception e) {
e.printStackTrace();
}</span>