Author: Henry Chen 译者:李力 介绍 由于可扩展标记语言(XML)的易用性和轻携性,其近年来获得了极大的流行。它与Java结合起来,非常适用于可移植的数据和代码。每一个与XML文档打交道的Java程序员,无论是读数据,还是进行数据转换,都必须对Java API’s for XML Processing (JAXP)有一个很深的理解。编写XML解析器无关的代码有许多好处,JAXP API 是用于XML的,就像JDBC API是用于关系型数据库的。这篇介绍性的文章帮助开发者学习JAXP API,并让开发者对可插入层(pluggability layer)有一个很深的理解,这样,开发者就可以在他们的应用程序中自如的更换解析器。 JAXPack SUN推出了一个用于XML的Java API 和架构,称其为Java XML Pack (JAXPack - http://java.sun.com/xml/javaxmlpack.html)。下载包中包括了现在行业中一些重要的标准。这篇文章中,我们将注意力放在JAXP(the API for XML Processing)上,Sybase的Easerver从版本3.6.1开始支持JAXP。 首先,我们看一下JAXP提供的解析能力,解析XML文档有两种最基本的方法, 基于事件的SAX和遍历树的DOM。开发者可以选择最适合他们需要的方法。让我们钻进去,深入的看一下这些API。 这篇文章中,我们用图1中的XML文档来阐述我们的例子。
SAX Simple API for XML Parsing (SAX)是事件驱动的,它从头到尾遍历整个文档, 当它遇到一个语法结构时,它会通知运行它的程序,这些是通过事件处理接口ContentHandler, ErrorHandler, DTDHandler, 和 EntityResolver中的回调方法实现的。这些回调方法可以被开发者自定义实现来满足一些特殊的要求。图2描绘了SAX解析器解析文档是各种组件之间的关系。
DOM Document Object Model (DOM)是将XML文档解析成树状对象的一套接口,每一个对象,或结点(node)都有一个用org.w3c.dom包中的接口表示的类型(type).如Element, Attribute, Comment, 和Text。可以像操作其他任何树状数据结构一样来操作DOM树状对象,它允许随机访问XML文档中特定部分的数据,并且修改它,这些是SAX解析器做不到的。 这种方法的缺点是它非常占用内存和CPU资源,因为构建DOM树时需要将整个XML文档读入并保持在内存中。