1.dom4j 解析
使用dom4j解析xml 首先需要引入dom4j的jar包。下载什么的,就自己找了。
我随便写了一个xml类似这样子
<?xml version="1.0" encoding="UTF-8"?>
<hr>
<employee>
<employeeId>10002</employeeId>
<employeeName>vengery</employeeName>
<employeeCode>vengery</employeeCode>
<status>NORMAL</status>
<certificateId>3326</certificateId>
</employee>
<employee>
<employeeId>10003</employeeId>
<employeeName>venger</employeeName>
<employeeCode>venger</employeeCode>
<status>NORMAL</status>
<certificateId>3326</certificateId>
</employee>
<employee>
<employeeId>10004</employeeId>
<employeeName>venge</employeeName>
<employeeCode>venge</employeeCode>
<status>NORMAL</status>
<certificateId>3326</certificateId>
</employee>
</hr>
这个就自己发挥了。
下面是java代码。
其实核心就是:
1.创建解析器。
2.读取xml文件 转换为document对象。
3.获取根节点(它是一个element)。
4.从根节点获取其子节点的节点名和值。
其一般用法是:4.1:element.getName() 表示获取子节点的名称
4.2:element.getTextTrim() 表示获取子节点的值
4.3:element.elements() 表示获取该节点下的所有子节点
核心代码:
SAXReader reader=new SAXReader();
Document doc=reader.read(new File("d:/test.xml"));
Element root=doc.getRootElement();
源码:
package com.main;
import java.io.File;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Dom4jTest {
//定这个方法主要是为了递归调用,然后输出所有节点内容
public static void getNodeValue(Elementlist){
System.out.println("***************");
System.out.println(list.getName());//节点名称
System.out.println(list.getTextTrim());//节点内容
List<Element> lists=list.elements();//获取元素下的所有节点的内容
for(Elemente:lists){
getNodeValue(e);//递归调用这个方法,输出节点名称,内容
}
}
public static void main(String[]args) {
// TODO Auto-generated method stub
try {
SAXReader reader=new SAXReader();
Document doc=reader.read(new File("d:/test.xml"));
Element root=doc.getRootElement();
//获取某个节点就是Element node=root.Element(“nodeName”)
getNodeValue(root);
}
catch (DocumentExceptione) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2.JDOM 解析
其实jdom解析跟dom4j 用法上差不多
不同的是 jdom使用的是 SAXBuilder。
SAXBuilder builder=new SAXBuilder();
Document doc=builder.build(new File("d:/test.xml"));
Element element=doc.getRootElement();
然后就与dom4j一样的用法了,深入的东西,现在就先不考虑,关于各种解析的差异以及优劣,网上也都有说。
3.DOM 解析
我们以dom4j为参考点,与dom4j不同的点在于
dom首先需要实例化工厂方法,通过工厂方法新建一个documentBuilder 然后进行解析
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder= dbf.newDocumentBuilder();
Document document=documentBuilder.parse(new File("d:/test.xml"));
需要注意的是,这里的Document 是w3c包下的,所以Document 获取字节点的用法 与jdom和dom4j又有所不同。
w3c 获取子节的方法是: NodeList nodeList=node.getChildNodes(); 他得到的是一个子节点list,可以进行遍历得到子节点,
获取子节点内容的方法是 node.getTextContent()
源码是这样的:
package.com.main;
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class DomTest {
public static void main(String[] args) throws Exception, IOException {
// TODO Auto-generated method stub
//使用dom 解析xml 首先需要创建documentBuilderFactory,通过这个工厂方法得到builder之后创建解析器
long time= System.currentTimeMillis();
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
try {
DocumentBuilder documentBuilder= dbf.newDocumentBuilder();
Document document=documentBuilder.parse(new File("d:/hap3.y/hap/hap/src/main/java/com/hand/hap/hr/controllers/test.xml"));
list(document);
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long nowtime=System.currentTimeMillis();
System.out.println(nowtime-time);
}
public static void list(Node node){
System.out.println("************");
System.out.println(node.getTextContent());
NodeList nodeList=node.getChildNodes();
for(int i=0;i<nodeList.getLength();i++){
Node child= nodeList.item(i);
list(child);
}
}
}