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] | 选择所有具有元素 price 且 price 元素值大于 20.00 的,作为 bookstore 元素的子元素的 book 元素 |
| /bookstore/book[price>20.00]/title | 选择所有具有元素 price 且 price 元素值大于 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/”。