DOM4j 是一致评价很高的一款开源XML解析器 支持XPath XML XSLT DOM SAX 和 JAXP并自带了一个SAX解析器
可以说是一个 20% - 80% 的工具(这个好像是JDOM的声明)
先看看API
org.dom4j.DocumentHelper
这个类的所有的方法都是static的 可以简单的用来创建document element attribute 等等
org.dom4j.DocumentFactory
这个类是工厂方法的集合用来简单构建DOM4J树
OutputFormat
这个类用来设置格式和字符编码等等
XMLWriter
标准的输出类
Document和Element都是实现了Brance这个接口
现在利用DOM4J来简单的输出一个xml文档
中间用OutputFormat来设置了格式
还有如果是用java.io.Write构造的输出不会自动刷新 需要在write之后手动刷新
输出:
我这用的是DocumentFactory 也可以用DocumentHelper的static方法来实现 Element也可以
结果是一样的
SAX
现在来看DOM4J的SAX的实现
解析XML的方法有很多 SAX是性能较好的一种 在DOM4J中用SAXReader来获得DOM4J树
在DOM4J中 和JAXP一样 Node是核心 其他的接口(如Attribut Document等等)都是对Node的扩展
在JAXP中的Node没有accept方法 在DOM4J中Node多了一种方法accept
void |
accept(Visitorvisitor) accept is the method used in the Visitor Pattern. |
此方法允许你传进一个实现了Visitor的类 这个类一看API就知道了
void |
visit(Attributenode) Visits the given Attribute |
void |
visit(CDATAnode) Visits the given CDATA |
void |
visit(Commentnode) Visits the given Comment |
void |
visit(Documentdocument) Visits the given Document |
void |
visit(DocumentTypedocumentType) Visits the given DocumentType |
void |
visit(Elementnode) Visits the given Element |
void |
visit(Entitynode) Visits the given Entity |
void |
visit(Namespacenamespace) Visits the given Namespace |
void |
visit(ProcessingInstructionnode) Visits the given ProcessingInstruction |
void |
visit(Textnode) Visits the given Text |
可以定制回调时所用的类 这个实现了Visitor的类的方法 可以自己添加处理方式来根据自己的需要解析XML
实例:解析一个XML
hibernate.cfg.xml
先写一个类来扩展VisitorSupport
SAXParserTest.java
然后写一个解析的类
ParserTest.java
最后的输出如下:
可以看到完全是和过程相关的 有什么节点就怎么解析 碰到元素就调用元素的事件 碰到属性就调用属性的事件