XPath 语法

2024 年 8 月 29 日 | 阅读 3 分钟

XPath 表达式使用类似于 URL 的路径表示法来寻址 XML 文档的各个部分。 表达式的计算结果是节点集、布尔值、数字或字符串类型。 例如,表达式 book/author 将返回 <book> 元素中包含的 <author> 元素的节点集,前提是在源 XML 文档中声明了此类元素。

在 XPath 中,路径表达式用于选择 XML 文档中的节点或节点集。 通过遵循路径或步骤来选择节点。

让我们以一个例子来说明 XPath 的语法。 这里,我们采用一个 XML 文档。


选择节点

用于选择节点的路径表达式是

索引表达描述
1)nodename选择所有名为“nodename”的节点
2)/从根节点选择。
3)//从当前节点选择文档中与选择匹配的节点,无论它们在哪里。
4).选择当前节点
5)..选择当前节点的父节点
6)@选择属性

在上例中查看路径表达式及其详细信息

路径表达式结果
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>100]选择 bookstore 元素的所有 book 元素,这些元素具有 price 元素且值大于 100
/bookstore/book[price>100]/title选择 bookstore 元素的 book 元素的所有 title 元素,这些元素具有 price 元素且值大于 100

选择未知节点

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 元素
下一主题XPath 绝对路径