合理使用 XML,XPath 就能够显著地简化和加速应用程序。如果您的工具包中还没有 XPath,那么现在就把它添加进来吧。使用 Python 简要编写的具体示例使查询习语的出现更为自然。
XPath 理应成为您的朋友。
如果您很少使用 XML 进行开发,并且从未使用过 XPath,那么您将有机会开发性能更强、可维护性更佳的应用程序。这篇文章详细介绍了一些特定的示例,用来演示在简单的 XML 处理中,查询方法能够造成多大的影响。
基础知识
要确保 XPath 进展顺利,需考虑一些基础原理:
下列示例使用 Python 编写
以前您可能多次听说 Xsomething 很有用 —— 它设计用于解决特定的和实际的问题,它经过委员会的一致通过,等等。我承认我就听说过。虽然 XPath 与 XML 中所有其他的 Alphabet Soup 不同;但是它确实是 非常有用的工具。对于实际投身编程工作的程序员来说,XPath 是最具学习价值的 XML 定义之一,其重要性仅次于 XML 本身和 XHTML。
您不需要 XPath。您是一名实际动手编程的 XML 程序员,您的应用程序已经具备了所需的功能。可是关键在于,传统的过程编程不能很好地解决常见的 XML 问题。虽然程序能正确地运行,但是只需少量的查询代码就能使您的程序具有更好的可读性、更易于维护,并且在很多情况下,运行得更快,有时这种效果非常明显。使用这些代码的目的不是要抛弃现有的正常运作的编程方法,而是要学习一些辅助技巧,使用这些技巧可取得立杆见影的效果。
developerWork 上 XML 专区的读者大多致力于 C、C++、或 Java 开发。但 Python Python 是一种很值得展示的工具,因为它读起来像流线型的伪代码,并且广泛可用。即便是 Python 的初学者也能理解后继的用法。
类似于许多其他语言,Python 支持大量的 XML 库。过去常常会不知道从何处开始。然而,随着 Python 2.5 版本的推出,Fredrik Lundh 的非凡的 ElementTree 模块成为了标准;本文的示例将使用这个库。库本身很小,并能附加到任何 1.5.2 以上的 Python 版本中,参考资料 中对此作出了解释。正确安置好 ElementTree 后,执行示例程序所需的一切条件都已就绪。
XML 编程模型
目前大多数 XML 编程都是基于文档对象模型(Document Object Model,DOM )。这一模型将 XML 实例视为一个元素树,使用标记对元素进行标识,很多元素都有属性和/或子元素。XML 编程是一项繁重的工作,因为处理必须通过树导航到各个元素。例如,考虑 developerWorks 在开发 developerWorks 文章的内容的过程中所使用的模板 XML 。这看上去与 XHTML 极为相似。它的模式简单易懂,这当然是与工业应用程序(可能是用于采集机器或财务事项的众多细节)中常见的 XML 实例相比而言。即便是使用这个简单的模型,如果您想要报告文本中的所有锚点标记 —— 所有标记为 的元素 —— 那么您需要导航整个文档,到一个任意的嵌套深度。简单的非递归过程表达式并不能访问所有的元素,尽管许多库都包含有帮助功能,可以用于遍历树。