谓词

谓词 由一个称为谓词表达式的表达式组成,该表达式括在方括号 ([]) 中。 谓词通过保留某些项并废弃其他项来过滤序列。

针对序列中的每个项对谓词表达式求值一次。 谓词表达式的结果是一个称为 谓词真值xs:boolean 值。 将保留谓词真值为 true 的那些项,并且将废弃谓词真值为 false 的那些项。

谓词表达式的值可以是数字值,只要其静态类型是数字单项。 当谓词表达式的静态类型为数字单项时,如果要求值的项序列中上下文项的位置与数字单项匹配,那么谓词真值为 true 。 换言之: child::employee/child::address[2] 等同于 child::employee/child::address[fn:position() = 2] ,并返回 employee下的第二个地址。 如果谓词表达式是在解析表达式时无法确定为单项的数字,那么将发出不支持的错误信号。

对于所有其他数据类型,谓词真值是谓词表达式的有效布尔值。 如果谓词表达式求值为空序列或 false,那么有效布尔值为 false 。 否则,有效布尔值为 true

如果使用谓词来过滤原子值或函数调用,那么可能会发出不支持的错误信号。

示例

以下示例是包含谓词的轴步骤:
  • descendant::phone[attribute::type = "work"] 选择名为 phone 且其类型属性具有值 "work" 的元素的上下文节点的所有后代。
  • child::address[prov-state][pcode-zip] 选择具有 prov-state 子元素和 pcode-zip 子元素的上下文节点的所有 address 子代。