DOM4j解析xml文件

来源:互联网 发布:王千源 知乎 编辑:程序博客网 时间:2024/06/04 01:15
DOM4J是dom4j.org出品的一个开源XML解析包,它的网站中这样定义:
Dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platform using the Java Collections Framework and with full support for DOM, SAX and JAXP.
Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。
DOM4J使用起来非常简单。只要你了解基本的XML-DOM模型,就能使用。然而他自己带的指南只有短短一页(html),不过说的到健全。国内的中文资料很少。因而俺写这个短小的教程方便大家使用,这篇文章仅谈及基本的用法,如需深入的使用,请……自己摸索或查找别的资料。
之前看过IBM developer社区的文章(参见附录),提到一些XML解析包的性能比较,其中DOM4J的性能非常出色,在多项测试中名列前茅。(事实上DOM4J的官方文档中也引用了这个比较)所以这次的项目中我采用了DOM4J作为XML解析工具。

在国内比较流行的是使用JDOM作为解析器,两者各擅其长,但DOM4J最大的特色是使用大量的接口,这也是它被认为比JDOM灵活的主要原因。大师不是说过么,“面向接口编程”。使用DOM4J的已经越来越多。如果你善于使用JDOM,不妨继续用下去,只看看本篇文章作为了解与比较,如果你正要采用一种解析器,不如就用DOM4J吧。

下面我们使用一个小例子来进行DOM4j的解析工作。

我们在eclipse 中创建一个java项目为DOM4j,然后我们右键项目然后创建一个folder起名为lib。之后我们在网址为:http://www.dom4j.org/dom4j-1.6.1/,上载dom4j的jar包。然后将dom4j-1.6.1.jar 复制到lib中。然后我们在src中创建一个包为mypack,再创建一个folder用来存储book.xml文件。然后在创建一个DOM4jTest.java文件。准备工作完成。

book.xml

<?xml version="1.0" encoding="UTF-8"?><bookstore><book id="1"><name>冰与火之歌</name><author>马丁</author><year>2014</year><price>85</price></book><book id="2"><name>斗破苍穹</name><year>2012</year><price>89</price><sort>1</sort></book></bookstore>
DOM4jTest.java
package mypack;import java.io.File;import java.util.Iterator;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 <Attribute> void main(String[] args) {// TODO Auto-generated method stub//创建SAXREADER对象SAXReader reader=new SAXReader();try {//通过reader对象的read方法加载boos.xml,并获取document对象Document document=reader.read(new File("src/res/book.xml"));//通过document的getRootElement方法获得根节点Element bookStore=document.getRootElement();//通过elementIterator方法获取迭代器Iterator it=bookStore.elementIterator();//遍历迭代器获取根节点的信息while(it.hasNext()){System.out.println("==========开始遍历========+");Element book = (Element)it.next();//获取book的属性名和属性值List<org.dom4j.Attribute> bookAttrs=book.attributes();for(org.dom4j.Attribute attr : bookAttrs){System.out.println("属性名:"+attr.getName()+"-----属性值:"+attr.getValue());}//遍历子节点Iterator itt=book.elementIterator();while(itt.hasNext()){Element boochild=(Element)itt.next();System.out.println("属性名:"+boochild.getName()+"----"+boochild.getStringValue());}System.out.println("==========结束遍历========+");}} catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

之后运行即可得到。

==========开始遍历========+节点名:id-----节点值:1属性名:name----冰与火之歌属性名:author----马丁属性名:year----2014属性名:price----85==========结束遍历========+==========开始遍历========+节点名:id-----节点值:2属性名:name----斗破苍穹属性名:year----2012属性名:price----89属性名:sort----1==========结束遍历========+



0 0