运算符和特殊字符
XPath 表达式是使用下表中所示的运算符和特殊字符构造的。
|
子运算符;选择左侧集合的直接子级。 此路径运算符出现在模式开头时,表示应从根节点选择该子级。 |
|
递归下降;在任意深度搜索指定元素。 此路径运算符出现在模式开头时,表示应从根节点递归下降。 |
|
指示当前上下文。 |
|
当前上下文节点的父级。 |
|
通配符;选择所有元素,与元素名无关。 |
|
属性;属性名的前缀。 |
|
属性通配符;选择所有属性,与名称无关。 |
|
命名空间分隔符;将命名空间前缀与元素名或属性名分隔。 |
|
为运算分组,明确设置优先级。 |
|
应用筛选模式。 |
|
下标运算符;用于在集合中编制索引。 |
|
执行加法。 |
|
执行减法。 |
|
根据 IEEE 754 执行浮点除法。 |
|
执行乘法。 |
|
从截断除法返回余数。 |
此表不包括布尔运算符和集运算符,这两个运算符在布尔、比较和集表达式或集运算中列出。
优先级顺序(从最高优先级到最低优先级)的定义如下表所示。
优先级 | 字符 | 用途 |
---|---|---|
1 |
|
分组 |
2 |
|
筛选器 |
3 |
|
路径运算 |
分组运算符 ()
仅适用于顶级路径表达式。 例如,(//author/degree | //author/name)
是有效的分组运算,但 //author/(degree | name)
不是。
筛选模式运算符 ([]
) 的优先级高于路径运算符(/
和 //
)。 例如,表达式 //comment()[3]
选择相对于文档中任意位置备注的父级索引等于 3 的所有备注。 此表达式与表达式 (//comment())[3]
不同,后者选择相对于父级的所有备注集中的第三个备注。 前一个表达式可以返回多个备注,后一个表达式只能返回一个备注。
这些运算符和特殊字符在本参考文档中详细说明。
路径运算符
特定类型的元素集合可以使用路径运算符(/
和 //
)确定。 这些运算符根据其参数的“左侧”集合进行选择,“右侧”集合表示要选择的元素。 子运算符 (/
) 从左侧集合的直接子级中选择,而子代运算符 (//
) 从左侧集合的任意子代中选择。 因此,//
可以作为一个或多个层次结构级别的替代。
注意,路径运算符在执行查询时更改上下文。 通过将路径运算符连接在一起,用户可以遍历文档树。
示例
表达式 | 引用 |
---|---|
|
当前上下文节点的 |
|
|
|
作为 |
|
|
|
当前上下文中一级或多级深度的所有 |
通配符
通过使用通配符 (*
) 集合,不使用元素名即可引用元素。 *
集合引用作为当前上下文的子级的所有元素,与名称无关。
示例
表达式 | 引用 |
---|---|
|
|
|
所有作为 |
|
当前上下文的所有孙级元素。 |
|
|
|
|
注意,不支持模式 *:book
。
特性
XPath 使用 @
符号表示属性名。 属性和子元素应公平对待,两种类型之间的功能应尽可能相当。
注意: |
---|
属性不能包含子元素,所以,如果对属性应用路径运算符,将出现语法错误。此外,不能对属性应用索引,因为根据定义,不为属性定义任何顺序。 |
示例
表达式 | 引用 |
---|---|
|
当前元素上下文的 |
|
当前上下文内的 |
|
所有 |
注意,以下示例无效,因为属性不能包含任何子级。
price/@exchange/total
查找多个属性
使用 @*
可以返回某个元素的所有属性。 对于将属性作为记录中的字段的应用程序,此表达式可能非常有用。
示例
表达式 | 引用 |
---|---|
|
当前上下文节点的所有属性。 |
|
|
注意,不支持模式 @*:title
。