JDOM 能够替换 org.w3c.dom 软件包来有计划地操作 XML 文档。它并不是一个简单的替代品,实际上 JDOM 和 DOM 能够愉快地并存。另外,尽管它提供的类的封装从配置和运行分析器执行中分担了大量工作,但它不负责根据文本输入来对 XML 进行语法分析。JDOM 建立在现有的 API 的能力之上,正如项目网页所表述的“一个更好的捕鼠器”。
要理解需要备用 API 的原因,就要考虑 W3C DOM 设计的局限性:
- 语言独立。DOM 并不是用人们心目中的 Java 语言设计的。虽然这种方法保留了在不同语言中非常相似的 API,它也使那些习惯 Java 语言的程序员感到更麻烦。例如:Java 语言内建了一种
String类,而 DOM 则规范定义了自己的Text类。 - 严格的层次结构。DOM API 直接沿袭了 XML 规范。在 XML 中,每件东西都是一个结点,因此您能在 DOM 中找到一个几乎每件东西都可以扩展的基于
Node的接口和返回Node的一系列方法。就多态性的观点来讲,它是优秀的,但鉴于如上解释,它在 Java 语言中的应用是困难而且不便的,其中从Node向叶类型作显式下拉会导致代码的冗长和难以理解。 - 接口驱动。公共 DOM API 仅由接口组成(
Exception类是一个例外,但恰恰足够了)。w3c 对提供实现并不感兴趣,它只对定义接口(比较有意义)感兴趣。但它也意味着作为 Java 程序员使用 API 在创建 XML 对象时增加了分散程度,因为 w3c 标准大量使用工厂化的类和类似的灵活的但不直接的模式。在某些应用中,XML 文档是仅由语法分析器建立的,而从不会由应用程序级代码建立,这是不相关的。但是,随着 XML 更广泛的使用,并不是所有问题都继续需要由语法分析器来驱动。应用程序的开发人员需要一个更方便的方法有计划地构造 XML 对象。
对于程序员,这些约束意味着庞大(在内存占用和接口大小方面)的和难掌握的 API,学习和使用都很难。相反,JDOM 是作为一种轻量级 API 被制定的,最主要的是它是以 Java 为中心的。它在遵循 DOM 主要规则的基础上除去了上述缺点:
- JDOM 是 Java 平台专用的。只要有可能,API 都使用 Java 语言的内建
String支持,因此文本值也适用于String。它还可利用 Java 2 平台的类集,如List和Iterator,给程序员提供了一个丰富的并且和 Java 语言类似的环境。 - 没有层次性。在 JDOM 中,XML 元素就是
Element的实例,XML 属性就是Attribute的实例,XML 文档本身就是Document的实例。由于在 XML 中所有这些都代表了不同的概念,因此它们总是作为自己的类型被引用,而不是作为一个含糊的“结点”。 - 类驱动。因为 JDOM 对象就是像
Document、Element和Attribute这些类的直接实例,因此创建一个新 JDOM 对象就如在 Java 语言中使用new操作符一样容易。它还意味着不需要进行工厂化接口配置 -- JDOM 的使用是直截了当的。