服务器 频道

Oracle开发人员的 JDOM 和 XML 分析

  【IT168 服务器学院】JDOM使XML在Java中的操作比以往任何时候都更加容易。

  碰巧,你在过去可能已经用过众多Java库中的某一个以操作XML数据结构。那么JDOM(Java文档对象模型,Java Document Object Model)的用途是什么?开发者又为什么需要它呢?

  JDOM是用于Java优化的XML数据操作的源代码开放的Java库。尽管它与万维网协会(W3C,World Wide Web Consortium)的DOM类似,但它是一种可供选择的文档对象模型,它不是在DOM基础上构建的,也不以DOM为模型。它们的主要区别是:DOM是与语言无关的,最初是用于HTML页的JavaScript操作,而JDOM专用于Java,因此它利用Java的特性,其中包括方法过载(method overloading)、集合(collection)、映像(reflection)和人们熟悉的编程风格等。对Java编程人员来说,JDOM显得更自然、更"适用"。就像Java优化的RMI(remote method invocation,远程方法调用)库要比与语言无关的CORBA(Common Object Request Broker Architecture,通用对象申请中介体系结构)更自然一样。

  你可以根据源代码开放的Apache类型(商业友好)的许可,在jdom.org找到JDOM。它是合作设计开发的,并拥有超过3000个订阅者的邮件列表。此库已经被Sun公司的Java社区进程(JCP,Java Community Process)接受作为Java规范申请(JSR-102),并很快成为正式Java规范。

  本系列文章将对JDOM进行技术介绍。本文提供一些关于重要类的信息。下一篇文章将介绍如何在自己的Java程序中应用JDOM。

  JDOM软件包结构

  JDOM库包括六个软件包。第一个是org.jdom包,它包括表示XML文档以及其组件的类,这些组件有:Attribute、CDATA、Comment、DocType、Document、Element、EntityRef、Namespace、Processing Instruction和Text等。如果你对XML很熟悉,通过类的名字就可以知道它的用途了。

  下一个是org.jdom.input包,它包括用于构建XML文档的类。其中最主要和最重要的类是SAXBuilder。SAXBuilder通过监听输入的XML简单API(SAX,Simple API for XML)事件建立相应的文档。如果需要由一个文件或其他流(stream)建立文档,那就可以采用SAXBuilder。它采用SAX分析器读取流,并根据SAX分析器的"回调"建立文档。这一设计的一个好处就是SAX分析器越快,SAXBuilder也会越快。另一个主要输入类是DOMBuilder。DOMBuilder由DOM树构建。如果预先已经有了一个DOM树,并希望用JDOM版本的树来代替,那么采用DOMBuilder是非常方便的。

  对于这些可能的生成器来说,不存在什么限制。例如,由于Xerces有Xerces本地接口(XNI,Xerces Native Interface),可用于在比SAX较低的层次上进行操作,所以编写一个XNIBuilder以支持某些分析器知识,而不采用SAX,就可能很有意义。一个构成JDOM项目的很流行的生成器是ResultSetBuilder。它利用JDBC结果集合,生成一个XML文档,用以表示SQL结果,根据是哪种元素和哪种属性,它有多种不同的编排。

  org.jdom.output包中包括输出XML文档的一些类。其中最重要的类是XMLOutputter。它将文档转换为一个字节流,用于输出到文件、流和接口程序(sockets)中。XMLOutputter具有很多支持原始输出(raw output)、完美输出(pretty output)、压缩输出或其他输出的特殊配置选项。它是一个相当复杂的类。这可能是为什么DOM level2中仍然没有这种能力的原因。

  其他输出器(outoutter)包括SAXOutputter,它可以产生基于文档内容的SAX事件。尽管它看起来有些神秘,但事实证明这个类在XSLT变换中极其有用,这是因为相对于将文档数据传递到一个引擎的字节来说,SAX事件是一种更为有效的方法。还有一个DOMOutputter输出器,它用于生成表示文档的DOM树。一个有趣的输出器是JTreeOutputter,它只有几十行代码,它可以建立表示文档的JTree。将它与ResultSetBuilder联合起来后,仅用几行代码就可以通过SQL查询得到结果的树视图。

  注意,与在DOM中不同,文档并不与它们的生成器捆绑在一起。这就形成了一个出色的模型,在这种模型中,你可以用一些类保持数据,另一些类构造数据,其他一些类来定制数据。可以随意进行混合和匹配。

  org.jdom.transform和org.jdom.xpath包中还有支持内置的XSLT转换和XPath查找的类。

  最后,org.jdom.adapters包中还包括在DOM交互中对库提供帮助的类。该库的使用者永远不需要调用这一软件包中的类。这些类是随时可用的,因为每个DOM实现都为特定的引导任务生成不同的方法名称,所以适配器类将标准调用转换成分析器专用的调用。Java API for XML Processing(JAXP)为解决此问题提供了另一种方法,事实上降低了对这些类的需要,但是这些类仍然保留了下来,这是因为由于许可证的原因,并不是所有的分析器都支持JAXP,也不是任何地方都安装有JAXP。

 

0
相关文章