路径表达式的缩写语法

XQuery 为路径表达式中的轴提供了简化的语法。

表1 描述了路径表达式中允许使用的缩写。

表 1. 路径表达式的缩写语法
缩写语法 描述
未指定轴 child:: 的速记缩写,除非轴步指定了 attribute() 用于节点测试。 轴步骤指定属性测试时,省略轴是 attribute:: 的速记形式。
@ attribute:: 的速记缩写。
//

/descendant-or-self::node()/ 的速记缩写,但此缩写出现在路径表达式开头时除外。

此缩写出现在路径表达式开头时,轴步骤将选择初始节点序列,其中包含上下文节点所在的树的根节点,以及充当此根节点后代的所有节点。 如果根节点不是文档节点,则此表达式会产生错误。

.. parent::node() 的速记缩写。

缩写和未缩写句法的示例

表2 提供了缩写和未缩写语法的示例。

表 2. 完整和简略语法对比
非缩写语法 缩写语法 结果
child::para para 选择充当上下文节点子代的 para 元素。
child::* * 选择上下文节点中的所有元素。
child::text() text() 选择上下文节点的所有子文本节点。
child::node() node() 选择上下文节点的所有子代。 此表达式不返回任何属性节点,因为属性不是节点的子节点。
attribute::name @name 选择上下文节点的 name 属性。
attribute::* @* 选择上下文节点的所有属性。
child::para[attribute::type="warning"] para[@type="warning"] 选择上下文节点的类型属性值为 warning 的所有 para 子代。
child::chapter[child::title="Introduction"] chapter[title="Introduction"] 选择上下文节点的 chapter 子代,该子代的一个或多个 title 子代的类型值等于字符串 Introduction
child::chapter[child::title] chapter[title] 选择上下文节点的 chapter 子代,该子代具有一个或多个 title 子代。