JDOM 自身不包含解析器。它通常使用 SAX2 解析器来解析和验证输入 XML 文档(尽管它还可以将以前构造的 DOM 表示作为输入)。它包含一些转换器以将 JDOM 表示输出成 SAX2 事件流、DOM 模型或 XML 文本文档。JDOM 是在 Apache 许可证变体下发布的开放源码。
DOM4J 代表了完全独立的开发结果,但最初,它是 JDOM 的一种智能分支。它合并了许多超出基本 XML 文档表示的功能,包括集成的 XPath 支持、XML Schema 支持以及用于大文档或流化文档的基于事件的处理。
为支持所有这些功能,DOM4J 使用接口和抽象基本类方法。DOM4J 大量使用了 API 中的 Collections 类,但是在许多情况下,它还提供一些替代方法以允许更好的性能或更直接的编码方法。直接好处是,虽然 DOM4J 付出了更复杂的 API 的代价,但是它提供了比 JDOM 大得多的灵活性。
在添加灵活性、XPath 集成和对大文档处理的目标时,DOM4J 的目标与 JDOM 是一样的:针对 Java 开发者的易用性和直观操作。它还致力于成为比 JDOM 更完整的解决方案,实现在本质上处理所有 Java/XML 问题的目标。在完成该目标时,它比 JDOM 更少强调防止不正确的应用程序行为。
DOM4J 是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的 Java 软件都在使用 DOM4J 来读写 XML,特别值得一提的是连 Sun 的 JAXM 也在用 DOM4J。
JDOM,包路径为 org.jdom.×;
DOM4J,包路径为 org.dom4j..×;
读取单个元素,区别不大,这里主要说,如下面,同元素,循环读取的区别
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean id="testBean" class="com.just.Test"/>
<bean id="testBean2" class="com.just.Test2"/>
</beans>
Jdom读取如下:
SAXBuilder sBuilder = new SAXBuilder();
File fe = new File(filename);
Document document = sBuilder.build(fe);
Element eroot = document.getRootElement();
Element e = eroot.getChild("beans");
List eList = e.getChildren("bean");
然后,对List对象读取,得到 Element 。
而 DOM4J 读取如下:
SAXBuilder sBuilder = new SAXBuilder();
File fe = new File(filename);
Document document = sBuilder.build(fe);
Element eroot = document.getRootElement();
Iterator i = root.elementIterator("bean");
通过迭代器实现,循环读取。