XPath 表达式

XML 文档以树的形式组织,由根节点和后代子节点组成。 函数库依靠 XPath 参数在该树中浏览并定位单个 XML 节点。

XPath 表达式的结果可以是一个节点,也可以是一组元素、文本或属性节点。 例如,XPath 表达式 "/ABC/DEF会选择 XML 文档 ABC 根节点下的所有 DEF 子节点。 下表总结了 XPath 语法最常见的功能。

表 1. XPath 语法概述
XPath 语法 用途
/ XPath 表达式中的初始正斜线指定了树的根。 指定带斜线的绝对路径。 例如,"/ABC指定位于根节点的 ABC 子元素。 如果省略开头的斜线,则路径为相对路径,相对路径的上下文默认为根元素。 在 XPath 表达式中使用后续的正斜杠作为路径分隔符,以标识任意节点的子节点。 例如,"/ABC/DEF指定 DEF 元素,它是 ABC 元素的子元素,而 ABC 元素是根元素的子元素。
// 两个正斜线表示当前节点的所有后代。 例如,"ABC//DEF匹配 ABC 元素下的任何 DEF 元素。
* 星号是通配符,指定匹配任何子节点。 例如,"/ABC/*/DEF匹配 ABC 元素的子代 DEF 元素。
[] 括号指定谓词表达式,如二元运算符 OR、AND 和 NOT。 例如,"/RESIDENTS [AGE=65 and NAME="Jane Doe"]/ADDRESS会选择年龄为 65 岁、姓名为 Jane Doe 的所有居民的地址元素。 括号也表示列表的索引。 例如,"/POSTOFFICE/BOX[2]标识 POSTOFFICE 根元素下的第二个方框编号元素。
NODENAME 节点变量会选择命名节点的所有子节点。 示例如下所示:
  • bookstore会选择 bookstore 元素的所有子节点。
  • /bookstore选择了根元素 bookstore。 如果路径以正向斜线 ( / ) 开头,则表示元素的绝对路径。
  • bookstore/book选择 bookstore 的所有子书籍元素。
  • book选择文档中的所有书籍元素。
  • bookstore//book会选择 bookstore 下的所有书籍元素,无论它们位于 bookstore 元素下的哪个位置。
. 单周期选择当前节点。
.. 两个周期选择当前节点的父节点。
@ at 符号选择属性。 例如,"//@lang会选择所有以 lang 命名的属性。
func_
'
名称
XPath 支持一系列内置函数,如 "substring()、"round()和 "not()。 此外,还可以使用命名空间来提供用户定义的函数。