2007年5月4日星期五

XSL 简明教程(三)—— XPath 简明教程(2)

XPath 语法

我们已经知道了 XPath 使用路径表达式在 XML 文档中选择节点或者节点的集合。这里,我们将介绍得更具体一些。首先,请看下面这个 XML 文档实例,我们将围绕这个例子进行接下来的讲解:

选择节点

XPath 是根据路径或者层次来选择节点的。下表列出了一些最常使用的路径表达式:

表达式 说明
节点名称 选择该节点的所有子节点
/ 选择根节点
// 选择文档中从当前节点开始的匹配选择规则的节点,而不在意它们在何处
. 选择当前节点
.. 选择父节点
@ 选择属性

为了进一步说明这些表达式的用法,下表中我们将列出具体的路径表达式并说明其结果:

路径表达式 结果说明
bookstore 选择节点 bookstore 的所有子节点
/bookstore 选择根元素 bookstore
请注意:如果一个路径表达式以 / 开始,将表示使用的是绝对路径
bookstore/book 选择所有作为元素 bookstore 的子元素的 book
//book 选择所有 book 元素而不在意它们所处的位置
bookstore//book 选择所有作为元素 bookstore 的后代的 book 元素而不在意它们所处的位置
//@lang 选择所有名为 lang 的属性

谓词

谓词用于帮助人们找到特定的节点或者是具有特定值的节点。谓词总是使用方括号包括起来。为了让读者能够比较直观的了解谓词的作用和使用方法,下表中我们将列出具体的包含谓词的路径表达式并说明其结果:

路径表达式结果说明
/bookstore/book[0]选择元素 bookstore 的第一个 book 子元素

请注意:IE5 及更新的版本的实现方案 [0] 可以是第一个节点,但是根据 W3C 标准实际上 [1] 才应该是第一个节点!
/bookstore/book[last()]选择元素 bookstore 的最后一个 book 子元素
/bookstore/book[last()-1]选择元素 bookstore 的倒数第二个 book 子元素
/bookstore/book[position()<3]选择元素 bookstore 的前两个 book 子元素
//title[@lang]选择所有具有 lang 属性的 title 元素
//title[@lang='zh_CN']选择所有具有 lang 属性且属性值为“zh_CN”的 title 元素
/bookstore/book[price>20.00]选择所有具有元素 priceprice 元素值大于 20.00 的,作为 bookstore 元素的子元素的 book 元素
/bookstore/book[price>20.00]/title选择所有具有元素 priceprice 元素值大于 20.00 的,作为 bookstore 元素的子元素的 book 元素的 title 子元素

选择未知节点

使用 XPath 通配符可以帮助人们选择未知的 XML 元素。

通配符说明
*匹配任意元素节点
@*匹配任意属性节点
node()匹配任意类型的任意节点

同样,下表可以帮助我们更好的理解这些通配符的用法:

路径表达式结果说明
/bookstore/*选择所有 bookstore 元素的子节点
//*选择文档中的所有元素
//title[@*]选择具有任意属性的 title

多路径选择

我们可以通过在一个 XPath 路径表达式中使用 | 操作符来选择多个路径。请看示例:

路径表达式结果说明
//book/title | //book/price选择所有作为元素 book 的子元素的元素 title price
//title | //price选择文档中所有的元素 title price
/bookstore/book/title | //price选择所有作为元素 book 的子元素的元素 title 文档中所有的 price 元素

转载请注明“转自粲言堂 http://xuecan.blogspot.com/”。


Copyright (C) 2007, XUE Can.

Creative Commons License 本博客作品(包括但不限于文字、图像、音频、视频以及动画),采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。 转载请注明“转自粲言堂 http://xuecan.blogspot.com/”。