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 元素 |
|