快速业务通道

在Java中使用DOM和XPath进行有效的XML处理 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
DOM 特定构造的使用(如 NodeList )。JDOM 将不同的节点类型(如 Document、Element 和 Attribute )定义为不同的 Java 类,这意 味着开发者可以使用 new 构造它们,避免频繁类型转换的需要。JDOM 将字符串表示成 Java String ,并且通过普通的 List 和 Iterator 类来表示节点的集合。(JDOM 用其本身类替 代 DOM 类。)

JDOM 为提供更完善的接口做了相当有益的工作。它已经被接受成为 JSR(正式的 Java Specification Request),而且它将来很可能会被包含到核心的 Java 平台中。但是,因其 还不是核心 Java API 的一部分,一些人对于使用它还心存犹豫。这儿还有关于与 Iterator 和 Java 对象频繁创建相关的性能问题的报告。(请参阅 参考资料)。

如果您对 JDOM 的接受性和可用性已经满足,并且如果您也没有将 Java 代码和程序员转 移到其它语言的直接需求,JDOM 是个值得探索的好选择。JDOM 还不能满足本文探讨的项目 所在的公司需要,因而他们使用了非常普遍的 DOM。本文也是这样做的。

常见编码问题

几个大型 XML 项目分析揭示了使用 DOM 中的一些常见问题。下面对其中的几个进行介绍 。

代码臃肿

在我们研究中查看的所有项目,本身都出现一个突出的问题:花费许多行代码行来做简单 的事情。在某个示例中,使用 16 行代码检查一个属性的值。而同样的任务,带有改进的健 壮性和出错处理,可以使用 3 行代码实现。DOM API 的低级本质、方法和编程模式的不正确 应用以及缺乏完整 API 的知识,都会致使代码行数增加。下面的摘要介绍了关于这些问题的 特定实例。

遍历 DOM

在我们探讨的代码中,最常见的任务是遍历或搜索 DOM。 清单 1 演示了需要在文档的 config 节里查找一个称为“header”节点的浓缩版本代码:

清单 1 中,从根开始通过检索顶端元素遍历文档,获取其第一个子节点( configNode ),并且最终单独检查 configNode 的子节点。不幸的是,这种方法不仅冗长,而且还伴随 着脆弱性和潜在的错误。

例如,第二行代码通过使用 getFirstChild 方法获取中间的 config 节点。已经存在许 多潜在的问题。根节点的第一个子节点实际上可能并不是用户正在搜索的节点。由于盲目地 跟随第一个子节点,我忽视了标记的实际名称并且可能搜索不正确的文档部分。当源 XML 文 档的根节点后包含空格或回车时,这种情况中发生一个频繁的错误;根节点的第一个子节点 实际是 Node.TEXT_NODE 节点,而不是所希望的元素节点。您可以自己试验一下,从 参考资 料下载样本代码并且编辑 sample.xml 文件 ― 在 sample 和 config 标记之间放置一个回 车。代码立即异常而终止。要正确浏览所希望的节点,需要检查每个 root 的子节点,直到 找到非 Text 的节点,并且那个节点有我正在查找的名称为止。

清单 1 还忽视了文档结构可能与我们期望有所不同的可能性。例如,如果 root 没有任 何子节点, configNode 将会被设置为 null ,并且示例的第三行将产生一个错误。因此, 要正确浏览文档,不仅要单独检查每个子节点以及核对相应的名称,而且每步都得检查以确 保每个方法调用返回的是一个有效值。编写能够处理任意输入的健壮、无错的代码,不仅需 要非常关注细节,而且需要编写很多行代码。

最终,如果最初的开发者了解它的话,清单 1 中示例的所有功能应该可以通过利用对 getElementsByTagName 函数的简单调用实现。这是下面要讨论的。

在Java中使用DOM和XPath进行有效的XML处理(3)

时间:2011-04-13 IBM Parand Tony Darugar

检索元素中的文本值

在所分析的项目中,DOM 遍历以后,第二项最常进行的任务是检索在元素中包含的文本值 。考虑 XML 片段 The Value 。如果已经导航到 sometag 节点,如何获取其文本值( The Valu

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号