快速业务通道

Java中的XML: Java文档模型的用法 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20

Java中的XML: Java文档模型的用法

时间:2011-01-25 IBM Dennis M. Sosnoski

在本系列的第一篇文章中,我研究了一些用 Java 编写的主要的 XML 文档模型的性能。但是,在开始选择这种类型的技术时,性能只是问题的一部分。使用方便至少是同样重要的,并且它已是一个主要理由,来支持使用 Java 特定的模型,而不是与语言无关的 DOM 。

为切实了解哪个模型真正的作用,您需要知道它们在可用性程度上是如何排名的。本文中,我将尝试进行这个工作,从样本代码开始,来演示如何在每个模型中编码公共类型的操作。并对结果进行总结来结束本文,而且提出了促使一种表示比另一种更容易使用的一些其它因素。

请参阅以前的文章来获取这个对比中使用的各个模型的背景资料,包含实际的版本号。还可以参阅“参考资料”一节中关于源代码下载、到模型主页的链接以及其它相关信息。

代码对比

在对不同文档表示中用法技术的这些对比中,我将显示如何在每种模型中实现三种基本操作:

根据输入流构建文档

遍历元素和内容,并做一些更改:

从文本内容中除去前导和尾随的空白。

如果结果文本内容为空,就删除它。

否则,将它包装到父元素的名称空间中一个名为“text”的新元素中。

将已修改的文档写入输出流

这些示例的代码是以我在上篇文章中使用的基准程序为基础的,并进行了一些简化。基准程序的焦点是为了显示每个模型的最佳性能;对于本文,我将尝试显示在每种模型中实现操作的最简便方法。

我已经将每个模型的示例结构化为两个独立的代码段。第一段是读取文档、调用修改代码和编写已修改文档的代码。第二段是真正遍历文档表示和执行修改的递归方法。为避免分散注意力,我已在代码中忽略了异常处理。

即使您不想使用 DOM 实现,但还是值得浏览下面对 DOM 用法的描述。因为 DOM 示例是第一个示例,所以与后面的模型相比,我用它来探究有关该示例的一些问题和结构的更详细信息。浏览这些内容可以补充您想知道的一些细节,如果直接阅读其它模型之一,那么将错过这些细节。

DOM

DOM 规范涵盖了文档表示的所有类型的操作,但是它没有涉及例如对文档的语法分析和生成文本输出这样的问题。包括在性能测试中的两种 DOM 实现,Xerces 和 Crimson,对这些操作使用不同的技术。清单 1 显示了 Xerces 的顶级代码的一种形式。

清单 1. Xerces DOM 顶级代码

1 // parse the document from input stream ("in") 2 DOMParser parser = new DOMParser(); 3 parser.setFeature("http://xml.org/sax/features/namespaces", true); 4 parser.parse(new InputSource(in)); 5 Document doc = parser.getDocument(); 6 // recursively walk and modify document 7 modifyElement(doc.getDocumentElement()); 8 // write the document to output stream ("out") 9 OutputFormat format = new OutputFormat(doc); 10 XMLSerializer serializer = new XMLSerializer(out, format); 11 serializer.serialize(doc.getDocumentElement());

Java中的XML: Java文档模型的用法(2)

时间:2011-01-25 IBM Dennis M. Sosnoski

正如我在注释中指出的,清单 1 中的第一块代码(第 1-5 行)处理对输入流的语法分析,以构建文档表示。Xerces 定义了 DOMParser 类,以便从 Xerces 语法分析器的输出构建文档。 InputSource 类是 SAX 规范的一部分,它能适应供 SAX 分析器使用的几种输入形式的任何之一。通过单一调用进行实际的语法分析和文档构造,如果成功完成了这一操作,那么应用程序就可以检索并使用已构造的 Document 。

第二个代码块(第 6-7 行)只是

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号