XPath 语法
XPath 使用路径表达式在 XML 文档中选择节点或节点集。通过遵循路径或步骤来选择节点。
XML 示例文档
我们将在下面的示例中使用以下 XML 文档。
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book>
<title lang="en">哈利波特</title>
<price>29.99</price>
</book>
<book>
<title lang="en">学习 XML</title>
<price>39.95</price>
</book>
</bookstore>
选择节点
XPath 使用路径表达式在 XML 文档中选择节点。通过遵循路径或步骤来选择节点。最常用的路径表达式如下所示:
表达式 | 描述 |
---|---|
nodename | 选择名称为 "nodename" 的所有节点 |
/ | 从根节点开始选择 |
// | 从当前节点开始选择文档中与选择匹配的节点,无论它们在何处 |
. | 选择当前节点 |
.. | 选择当前节点的父节点 |
@ | 选择属性 |
下表中列出了一些路径表达式及其结果:
路径表达式 | 结果 |
---|---|
bookstore | 选择名称为 "bookstore" 的所有节点 |
/bookstore | 选择根元素 bookstore 注意: 如果路径以斜杠 ( / ) 开头,则它始终表示到元素的绝对路径! |
bookstore/book | 选择 bookstore 的所有子 book 元素 |
//book | 选择文档中所有 book 元素,无论它们在何处 |
bookstore//book | 选择 bookstore 元素的所有后代 book 元素,无论它们在 bookstore 元素下何处 |
//@lang | 选择所有名为 lang 的属性 |
谓词
谓词用于查找特定节点或包含特定值的节点。
谓词始终嵌入方括号中。
下表中列出了一些带谓词的路径表达式及其结果:
路径表达式 | 结果 |
---|---|
/bookstore/book[1] | 选择 bookstore 元素的第一个子 book 元素。 注意: 在 IE 5,6,7,8,9 中,第一个节点是 [0],但根据 W3C,它是 [1]。为了解决 IE 中的这个问题,将 SelectionLanguage 设置为 XPath 在 JavaScript 中:xml.setProperty("SelectionLanguage","XPath"); |
/bookstore/book[last()] | 选择 bookstore 元素的最后一个子 book 元素 |
/bookstore/book[last()-1] | 选择 bookstore 元素的倒数第二个子 book 元素 |
/bookstore/book[position()<3] | 选择 bookstore 元素的前两个子 book 元素 |
//title[@lang] | 选择所有具有名为 lang 的属性的 title 元素 |
//title[@lang='en'] | 选择所有具有 "lang" 属性且值为 "en" 的 title 元素 |
/bookstore/book[price>35.00] | 选择 bookstore 元素中所有价格元素值大于 35.00 的 book 元素 |
/bookstore/book[price>35.00]/title | 选择 bookstore 元素中所有价格元素值大于 35.00 的 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 | 选择 bookstore 元素的 book 元素的所有 title 元素以及文档中的所有 price 元素 |