谓词
谓词 由一个称为谓词表达式的表达式组成,该表达式括在方括号 ([]) 中。 谓词通过保留某些项并废弃其他项来过滤序列。
针对序列中的每个项对谓词表达式求值一次。 谓词表达式的结果是一个称为 谓词真值的 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子代。