Java 版本的 XML API (ZT)

发表于:2007-07-01来源:作者:点击数: 标签:
SAX SAX 的全名是 Simple API for XML。SAX 是由一个名为 XML-dev 的 mailing list 所发展出来的(XML-dev 是一群志同道合的 XML 高手所组成),SAX 可将 XML 文件用循序的方式列出,SAX 也定义了剖析 XML 文件会发生的许多事件,比方说:element 开始、eleme
SAX
SAX 的全名是 Simple API for XML。SAX 是由一个名为 XML-dev 的 mailing list 所发展出来的(XML-dev 是一群志同道合的 XML 高手所组成),SAX 可将 XML 文件用循序的方式列出,SAX 也定义了剖析 XML 文件会发生的许多事件,比方说:element 开始、element 结束、出现字符数据、DTD 定义 entity...... 等。事件发生时,SAX 剖析程序会呼叫对应的 callback method。程序员可以自行定义这些 callback method 的内容,以对此事件做出适当的反应,并允许程序使用这些 XML 的资料。程序员从 David Megginson 的网站下载 API 回来就可以开始写 SAX 程序了,他们也就很快地将 XML 用到日常工作上。

然而,这还不够。虽然 SAX 执行起来很快(因为 SAX 不需要将整个 XML 文件同时放在内存),但是却也无法修改 XML 资料,而且一般对象导向程序员也比较不熟悉 SAX 所采用的 callback 事件处理方式,常常会用得不恰当。程序员对 SAX 不满,再度寻觅一个更好的 API,他们找到了 DOM。

DOM
DOM 的全名是 Document Object Model。Java 版的 DOM 提供了一个和 XML 文件不同的外观。基本上 DOM 的文件是一个 tree,你可以任意地存取、修改这个由 XML 文件所形成的 DOM tree。SAX 所采用的循序、事件式的处理方式,在 DOM 引进对象导向观念后得到了平衡。对 DOM 来说,每个项目都是特定型态的节点,都继承自 Node 接口。常见的节点有 Document、Text、Element、以及 Attribute 等,这些节点都可以有子节点,XML 文件可以构成一棵完整的 DOM tree。Java 程序员只要到 W3C 下载 DOM 回来即可使用 DOM。XML 再度被用到 Java 程序中,程序员比较能接受此 API,而且用得凶。

但是,想使用 DOM,仍然必须全盘了解 XML,逼得程序员还是得回去了解 XML 的规格书(不过 www.xml.com 有一个注释版的文件,较易 阅读),逼得他们去学一些一般程序用不着的概念,比方说:entities、namespaces、以及处理指令(processing instruction)。再者,DOM 要求树状图必须整体在内存中, 使得 Java 程序的效能变差,所以不少程序员不是回去使用 SAX,就是决定再等一等。

JAXP
有了 Sun 所设计的 JAXP(全名是 Java API for XML Parsing),Java 版本的 XML API 终于开始正视到一个重要的事实:许多 Java 程序员只希望让程序兼容于 XML,但不想把 XML 的规格读到滚瓜烂熟。JAXP 让你可以利用简单的方式来获得一个 DOM Document 或 SAX 剖析器,因此程序员不用再为不同厂商的不同版本大伤脑筋。JAXP 也意图让你的程序只需小修改就可换成其它厂商的实作版本。这才是程序员习惯的方式。

然而,JAXP 只是让底下的实作可以交换,整个 JAXP 还是建构在 DOM 和 SAX 这两个不太好用的 API 上。因为它支持旧版的 API(SAX 1.0 与 DOM Level 1),所以造成一些 不方便的限制。

JDOM
JDOM(Java Document Object Model)是一个新的 API,用来提供 Java 程序处理 XML 的能力。更重要的是:它还是第一个明确地针对 Java 程序员所设计用来处理 XML 的 API,这也意味着它符合一般 Java 程序员的期待、习惯、和希望。此 API 不要求程序员一板一演地操作树状结构,而是,比方说,直接的操作某 Element。比较起来,传统的方式可就麻烦了:首先你得逛到树中的 Element 节点的子节点,判断其是否为文字节点,然后才能取得其值。

而且,method 就可直接传出集合型态的对象,不像其它 API 要用特殊的方式(比方说:DOM 的 NamedNodeMap,SAX 的 Attributes),这使得 JDOM 比 DOM 更直觉好用。但是因为 JDOM 已经针对 Java 做了最佳化,所以它的性能可以媲美 SAX。关于 JDOM(以类似 Apache 方式授权的一个开放原始码计画)的更多信息,你可以在 www.jdom.org 找到,或者读我的书 Java and XML 第九章。

或许,JDOM 所带来的思维方向比 JDOM API 本身重要。它不强迫每个想使用 XML 的 Java 程序员都必须训练好 XML 的十八般武艺,它允许程序员能发挥杠杆原理,以现有的 XML 知识就能使用 XML 的 API。程序员不用再处处迁就 API 了,XML 可能因此会得到许多程序的支持。  

原文转自:http://www.ltesting.net