使用DOM4J的方式解析XML同样需要第三方jar包,如果你对前面三种解析方法都有所了解,那么用过DOM4J方式来解析xml就不会陌生了,话不多说直接上代码
XML文件
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book id="1">
<name>冰与火之歌</name>
<author>乔治马丁</author>
<year>2014</year>
<price>89</price>
</book>
<book id="2">
<name>安徒生童话</name>
<year>2004</year>
<price>77</price>
<language>English</language>
</book>
</bookstore>
代码:
package lowp.test.java;
import java.io.File;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/**
*
* @author Lowp
*
*/
public class DOM4JTest {
public static void main(String[] args) {
//1.创建一个SAXReader对象
SAXReader reader = new SAXReader();
try {
//2.通过reader的reader方法加载xml文件,并得到一个Dcument对象
Document document = reader.read(new File("src/res/books.xml"));
//3.通过document对象xml的根节点
Element bookstore = document.getRootElement();
//4.通过elementIterator方法获取一个迭代器
Iterator it = bookstore.elementIterator();
//5.遍历迭代器,获取bookstore节点下的任意一个子节点
while (it.hasNext()) {
System.out.println("===开始遍历第===");
//通过next方法获取迭代器中节点,并强制转换成Element类型
Element book = (Element) it.next();
//获取book的属性集合
List<Attribute> bookAtts = book.attributes();
//遍历属性
for (Attribute attr : bookAtts) {
System.out.println("属性名:" + attr.getName() + "--->属性值:" + attr.getValue());
}
//通过elementIterator方法获取一个book子节点迭代器
Iterator itt = book.elementIterator();
//遍历迭代器,获取book节点下的任意一个子节点
while (itt.hasNext()) {
//通过next方法获取迭代器中节点,并强制转换成Element类型
Element bookChlid = (Element) itt.next();
System.out.println("节点名:" + bookChlid.getName() + "--->节点值:" + bookChlid.getStringValue());
}
System.out.println("===结束遍历第===");
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行结果:
===开始遍历第===
属性名:id--->属性值:1
节点名:name--->节点值:冰与火之歌
节点名:author--->节点值:乔治马丁
节点名:year--->节点值:2014
节点名:price--->节点值:89
===结束遍历第===
===开始遍历第===
属性名:id--->属性值:2
节点名:name--->节点值:安徒生童话
节点名:year--->节点值:2004
节点名:price--->节点值:77
节点名:language--->节点值:English
===结束遍历第===
属性名:id--->属性值:1
节点名:name--->节点值:冰与火之歌
节点名:author--->节点值:乔治马丁
节点名:year--->节点值:2014
节点名:price--->节点值:89
===结束遍历第===
===开始遍历第===
属性名:id--->属性值:2
节点名:name--->节点值:安徒生童话
节点名:year--->节点值:2004
节点名:price--->节点值:77
节点名:language--->节点值:English
===结束遍历第===
4种解析XML文件方式总结
基础方法:DOM(平台无关的官方解析方式)、SAX(基于事件驱动的解析方式)
扩展方法:JDOM、DOM4J(在基础的方法上扩展出的,只有在java中能够使用的解析方法)
DOM:一次性将整个xml文件加载到内存中,形成DOM树
优点:形成了树结构,直观好理解,代码更容易编写
解析过程中树结构保留在内存中,方便修改
缺点:当xml文件较大时,对内存消耗比较大,容易影响解析性能并造成内存溢出
SAX:逐条语句判断解析
优点:采用事件驱动模式,对内存消耗比较小
适用于只需要处理xml中数据时
缺点:不易编码
很难同时访问同一个xml中的多处不同数据
JDOM:仅使用具体类而不使用接口
API大量使用了Collections类
DOM4J:JDOM的一种智能分支,它合并了许多超出基本XML文档表示的功能
DOM4J使用接口和抽象基本类方法,是一个优秀的Java XML API
具有性能优异、灵活性好、功能强大和极端易使用的特点
是一个开放源代码的软件
然而,具体要使用什么方式解析XML文件,还是要根据实际情况决定!!!