谓词是一个 XPath 表达式,用于针对某个轴筛选节点集,并生成一个新的节点集。 此筛选过程包括按顺序针对节点集中的每个节点计算该谓词。 每次针对节点计算该谓词时:
上下文节点是当前计算的节点。
上下文大小节点集中正在计算的节点数。
上下文位置是上下文节点在节点集中的位置。
最后一个上下文(即节点集中上下文节点的上下文)相对于定位步骤中指定的轴浏览文档树的方向。 通常,轴会按照正方向或反方向浏览树:
正轴是包含上下文节点或上下文节点之后的节点的轴。 child::、descendant::、descendant-or-self::、following:: 和 following-sibling:: 轴是正轴。 这些正轴按文档顺序为节点集中的节点编号,从第一个位置 1 开始。
反轴是包含上下文节点或上下文节点之前的节点的轴。 ancestor::、ancestor-or-self::、preceding:: 和 preceding-sibling:: 轴是反轴。 这些反轴按文档顺序相反的顺序为节点集中的节点编号,从第一个位置 1 开始。
对于其他轴,self:: 和 parent:: 轴返回单个节点。 因此,指定正轴或反轴对这两个轴没有意义。 attribute:: 和 namespaces:: 轴没有定义顺序;所以,也没有正轴和反轴。
选择节点
谓词表达式计算为数值或布尔值。
如果谓词计算为数字,XPath 将该数字与上下文节点的上下文位置进行比较。 如果数字和位置相同(即上下文节点处于树中相应的位置),谓词将计算为 true,上下文节点将包含在新的节点集中。 否则,上下文节点将排除在新节点集之外。
如果谓词没有计算为数字,XPath 将使用 boolean 函数将结果转换为布尔值。 例如,谓词 [genre='Computer'] 计算为一个节点集。 如果上下文节点有一个内容为 Computer 的子级 <genre> 元素,此谓词就计算为 true,并且该上下文节点被包括在新节点集内。 否则,上下文节点将排除在新节点集之外。
备注
数字谓词 [x] 等效于布尔谓词 [position()=x]。