在平時(shí)java開發(fā)工作中琴儿,經(jīng)常要用到xml文件保存相關(guān)的數(shù)據(jù)等江场,那么java如何解析XML文件呢甩牺?java本身提供了SAX和DOM方式對(duì)xml文件進(jìn)行解析曹鸠,另外還有兩種開源工具對(duì)xml進(jìn)行解析煌茬,分別是DOM4J和JDOM。
SAX:Simple API for XML
DOM:Document Object Model
JDOM:Java-based Document Object Model
DOM4J:Document Object Model for Java
現(xiàn)在的開發(fā)中彻桃,我們經(jīng)常要用到DOM4J對(duì)XML文件進(jìn)行解析坛善,這是因?yàn)橄啾容^而言,DOM4J性能最好邻眷,連Sun的JAXM也在用DOM4J眠屎。目前許多開源項(xiàng)目中大量采用DOM4J,例如大名鼎鼎的Hibernate也用DOM4J來(lái)讀取XML配置文件肆饶。如果不考慮可移植性改衩,那就采用DOM4J。下面來(lái)看用DOM4J如何解析XML文件:
一驯镊、引包
引入dom4j-1.6.1.jar包葫督,以確保能夠正常使用dom4j解析XML文件。
二板惑、解析XML文件
1橄镜、產(chǎn)生一個(gè)解析器對(duì)象
SAXReader reader = new SAXReader();
2、將xml文檔轉(zhuǎn)換為Document的對(duì)象
Document document = reader.read(new FIle(filePathName));
3冯乘、獲取文檔的根元素
Element root = document.getRootElement();
4洽胶、定義一個(gè)Iterator遍歷根節(jié)點(diǎn)下面的所有節(jié)點(diǎn)
Iterator it = root.elementIterator();
while(it.hasNext()){
Element element = (Element) it.next();
//未知屬性名稱情況下,逐個(gè)遍歷此元素的所有屬性裆馒,取出屬性對(duì)應(yīng)的值
Iterator attrIt = element.attributeIterator();
while (attrIt.hasNext()) {
Attribute attr = (Attribute) attrIt.next();
System.out.println(attr.getValue());
}
//已知屬性名稱的情況下姊氓,可以直接通過(guò)屬性名稱獲取對(duì)應(yīng)的值
String name = element.attributeValue("name");//獲取name屬性對(duì)應(yīng)的值
//同樣可以遍歷該元素下所有的節(jié)點(diǎn)丐怯,未知節(jié)點(diǎn)名稱情況下,逐個(gè)遍歷
Iterator it = element.elementIterator();
while(it.hasNext()){
Element e = (Element) it.next();
System.out.println(e.getName() + ": " + e.getText()); //獲取節(jié)點(diǎn)名稱以及節(jié)點(diǎn)對(duì)應(yīng)的文本值
}
//已知節(jié)點(diǎn)名稱nodeName的情況下他膳,可以直接通過(guò)節(jié)點(diǎn)名稱獲取對(duì)應(yīng)的值
String nodeValue = element.elementText(nodeName);
}
至此响逢,DOM4J解析XML的功能就結(jié)束了。