- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
XPath 2.0 简介
两年之前,本专栏开始第一次连载时,我曾撰写过有关 XPath 版本 1.0 的文章(请参阅 The XML Files:Addressing Infosets with XPath 以快速回顾)。正如最初的规范中所述:XPath 是一种用于寻址 XML 文档内容的语言。”通过使用 XPath 表达式,开发人员可以轻而易举地标识出 XML 文档中的节点,以进行进一步的处理。这使得利用简单的声明表达式替换复杂的遍历算法成为可能。例如,以下表达式将标识出所有为 Invoice 根元素子代且 Sku 属性值为 123 的 LineItem 元素的子元素:
/Invoice//LineItem[@Sku=123]/*
利用传统的 XML API 编写同样的逻辑,将是一项冗长乏味且充满艰辛的工作。因此,XPath 通常会被作为如今各种 API 实现(如 DOM 和 XPathNavigator 等等)中的层次服务而受到支持:
// C# DOM Code
XmlNodeList nodes =
doc.SelectNodes(/Invoice//LineItem[@Sku=123]/*);
for (int i=0; inodes.Count; i++) {
... // process selection here
}
XPath 还经常用于 XSLT 1.0 中,以寻址输入文档,如下所示:
xsl:apply-templates
select=/Invoice//LineItem[@Sku=123]/*/
总体上来说,XPath 对于 XML 开发人员而言非常重要,并迅速成为他们编程工具包中不可或缺的一部分。本专栏的其余部分假设读者熟悉 XPath 1.0(请参阅 /TR/xpath)。
XPath 1.0 限制
尽 管 XPath 1.0 简化了许多一般的编程任务,但是,开发人员开始想要得到更多好处。XPath 1.0 规范在几个领域中受到了限制或混淆,需要进行一番整改。开发人员一直致力于改进 W3C,并向该语言添加了一些更为有意义的功能,其中多数功能支持对 W3C XML 规范的其他引申(如 XML 架构、XML Query 1.0 以及 XSLT 2.0)。
自从 XPath 1.0 发布以来,XML 架构就成为 W3C 推荐项之一,并讯速定位为其他数个进行中的工作的“官方”类型系统,例如 XQuery 和其他与 Web 服务有关的工作。因为 XML 架构是 XML 全局中不可或缺的组成部分,所以 W3C 强烈希望实现类型化 XPath(能够选择类型 double 的所有元素不是非常好吗?)。而且,最近有关 XQuery 1.0 和 XSLT 2.0 的工作揭示了大量的共同基础,即两种语言在其中均可以共享相同的数据模型和表达式语法的领域。这个最小公分母就变成了 XPath 2.0。
XPath 2.0
有关 XPath 2.0 (/TR/XPath20) 的工作很好地修复了 XPath 1.0 中的问题并达到了下列要求(位于 /TR/xpath20req 的 XPath 2.0 Requirements 文档中对此进行了概述):
? 应当保持向后兼容性 ? 必须提升易用性 ? 必须改善字符串操纵和匹配 ? 必须支持 XML 系列标准(XSLT 2.0 和 XQuery 1.0) ? 必须支持 XML 架构(简单类型和复杂类型) 并不绝对要求向后兼容性的原因在于,它不如可能会形成阻碍的其他要求重要,虽然 W3C 已经尽全力来全面达到该要求。
提升易用性和简化常见用例(例如使用字符串)是非常清楚的目标,但是最后两个要求带来了更为明显的变化。在本专栏的剩余部分中,我将重点介绍这一更为显著的方面,以帮助您对即将到来的事物作好准备。
如果您在阅读本专栏时,希望试验某些示例表达式,请下载 Michael Kay 的 SAXON 7.2 XSLT 处理器,该处理器包含了一个相当完整的参考实现(请参阅 /saxon7.2/), 除了没有包含完整的 XML 架构支持。截至本文撰写之日止,任何 Microsoft XML 处理器(或 API)均不支持 XPath 2.0,但是预计它们的 XQuery 1.0 和 XSLT 2.0 实现支持它。虽然没有确定特定的发布日期,但是将其与该规范的发布之日(或许会在来年)相结合会比较有意义。
一个控制所有的数据模型
可 在 XPath 2.0 的数据模型中找到其最具意义的变化。可在 XQuery 1.0 和 XPath 2.0 数据模型规范中找到 XPath 2.0 数据模型的详细信息,而且,该信息由 XPath 2.0、XSLT 2.0 和 X
文档评论(0)