今天我们来介绍一款强大的xml解析工具:dom4j!
dom4j介绍:
dom4j是jdom的升级版,是一款开源软件,用来读写xml文件,hibernate等很多框架也用它来读写xml配置文件;使用的时候只需要引入dom4j的jar包即可。
dom4j可以读写xml文件,并且也支持XPath和XSLT。
dom4j的jar包结构:
interface java.lang.Cloneable
interface org.dom4j.Node
interface org.dom4j.Attribute
interface org.dom4j.Branch
interface org.dom4j.Document
interface org.dom4j.Element
interface org.dom4j.CharacterData
interface org.dom4j.CDATA
interface org.dom4j.Comment
interface org.dom4j.Text
interface org.dom4j.DocumentType
interface org.dom4j.Entity
interface org.dom4j.ProcessingInstruction
Attribute
定义了 XML 的属性。
Branch
指能够包含子节点的节点。如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为
CDATA
定义了 XML CDATA 区域
CharacterData
是一个标识接口,标识基于字符的节点。如CDATA,Comment,Text.
Comment
定义了 XML 注释的行为
Document
定义了XML 文档
DocumentType
定义 XML DOCTYPE 声明
Element
定义XML 元素
ElementHandler
定义了Element 对象的处理器
ElementPath
被 ElementHandler 使用,用于取得当前正在处理的路径层次信息
Entity
定义 XML entity
Node
为dom4j中所有的XML节点定义了多态行为
NodeFilter
定义了在dom4j 节点中产生的一个滤镜或谓词的行为(predicate)
ProcessingInstruction
定义 XML 处理指令
Text
定义 XML 文本节点
Visitor
用于实现 Visitor模式
XPath
在分析一个字符串后会提供一个 XPath 表达式
dom4j的使用
1、创建一个SAXReader对象
SAXReader reader = new SAXReader();
2、 通过read方法读取一个文件 转换成Document对象
Document document = reader.read(new File("src/EPP_02001218.xml"));
3、获取根节点元素对象
Element node = document.getRootElement();
4、获取节点内的内容,比如<book>数学之美</book>,可得到“数学之 美”
node.getText();
5、获取node节点下的第一个名为book的节点
node.element("book");
6、获取节点内的名称,比如<book>数学之美</book>,可得到“book”
node.getName();
7、自带的三种遍历
//枚举node下的所有子节点
for ( Iterator i = node.elementIterator(); i.hasNext(); ) {
Element element = (Element) i.next();
// do something
}
// 枚举名称为foo的节点
for ( Iterator i = node.elementIterator(foo); i.hasNext();) {
Element foo = (Element) i.next();
// do something
}
// 枚举属性
for ( Iterator i = node.attributeIterator(); i.hasNext(); ) {
Attribute attribute = (Attribute) i.next();
// do something
}
8、返回一个Element类型的list,获取node节点下的所有名为book的节点(只包括node的子节点)
List<Element> nodes = node.elements("book");
9、遍历这个list
for (Iterator it = nodes.iterator(); it.hasNext();) {
Element elm = (Element) it.next();
// do something
}
10、遍历一个xml的所有节点
public static void listNodes(Element node) {
System.out.println("当前节点的名称:" + node.getName());
//TODO SOMETHING
Iterator<Element> it = node.elementIterator();
// 遍历
while (it.hasNext()) {
// 获取某个子节点对象
Element e = it.next();
// 对子节点进行遍历
listNodes(e);
}
}
11、把这个node节点的所有内容(包括标签)作为String字符串返回
node.asXML();
此外,还可以增加节点;删除节点;对每个节点、节点中的属性、节点的内容进行增加修改删除;
附:
操作xml有一个很重要的方法,就是使用xpath,我还会写一篇文章介绍xpath,从而操作xml更灵活方便,当然dom4j也提供了xpath很好的支持!
更多dom4j功能的介绍,请参考:
http://www.jb51.cc/article/p-opkmxydx-po.html
http://www.blogjava.net/i369/articles/154264.html
http://www.cnblogs.com/forlina/archive/2011/06/09/2076534.html