谓词根据轴筛选节点集(类似于 SELECT 语句中的 WHERE 子句)。 谓词在括号之间指定。 对于要筛选的节点集中的每个节点,谓词表达式的计算方式为上下文节点,节点集中的节点数为上下文大小。 如果谓词表达式的计算结果为该节点的 TRUE,则节点包含在生成的节点集中。
XPath 还允许基于位置的筛选。 计算为数字的谓词表达式选择该序号节点。 例如,位置路径 Customer[3] 返回第三个客户。 不支持此类数字谓词。 仅支持返回布尔结果的谓词表达式。
注释
有关 XPath 的此 XPath 实现的限制及其与 W3C 规范之间的差异的信息,请参阅 “使用 XPath 查询(SQLXML 4.0)简介”。
选择谓词:示例 1
以下 XPath 表达式(位置路径)从当前上下文节点中选择具有 ALFKI 值的 CustomerID 属性的所有 <Customer> 元素子级:
/child::Customer[attribute::CustomerID="ALFKI"]  
在此 XPath 查询中, child 是 attribute 轴名称。 
              Customer 是节点测试(如果 Customer 为 <元素节点>,则为 TRUE,因为 <元素> 是轴的 child 主体节点类型)。 
              attribute::CustomerID="ALFKI" 是谓词。 在谓词中, attribute 是轴并且 CustomerID 是节点测试(如果 CustomerID 是上下文节点的属性,因为 <属性> 是轴的主要 attribute 节点类型),则为 TRUE。
使用缩写语法,还可以将 XPath 查询指定为:
/Customer[@CustomerID="ALFKI"]  
选择谓词:示例 2
以下 XPath 表达式(位置路径)从当前上下文节点中选择具有 SalesOrderID 属性且值为 1 的 <Order> 子孙:
/child::Customer/child::Order[attribute::SalesOrderID="1"]  
在此 XPath 表达式中attribute,child是轴名称。 
              Customer、Order节点测试。SalesOrderID 
              attribute::OrderID="1" 是谓词。
使用缩写语法,还可以将 XPath 查询指定为:
/Customer/Order[@SalesOrderID="1"]  
选择谓词:示例 3
以下 XPath 表达式(位置路径)从当前上下文节点中选择具有一个或多个 <ContactName> 子级的所有 <Customer> 子级:
child::Customer[child::ContactName]  
此示例假定 <ContactName> 是 XML 文档中 Customer> 元素的<子元素,在带批注的 XSD 架构中称为以元素为中心的映射。
在此 XPath 表达式中, child 是轴名称。 
              Customer 是节点测试(如果 Customer 为 <元素> 节点,则为 TRUE,因为 <元素> 是轴的主体节点类型 child )。 
              child::ContactName 是谓词。 在谓词中,child是轴,是ContactName节点测试(如果ContactName为元素>节点),则为< TRUE。
此表达式仅返回具有< ContactName> 元素子级的上下文节点的 Customer> 元素子项。<
使用缩写语法,还可以将 XPath 查询指定为:
Customer[ContactName]  
选择谓词:示例 4
以下 XPath 表达式选择没有 ContactName> 元素子级的上下文节点的 Customer 元素子<项:><
child::Customer[not(child::ContactName)]  
此示例假定 <ContactName> 是 XML 文档中 Customer> 元素的<子元素,并且数据库中不需要 ContactName 字段。
在此示例中, child 轴。 
              Customer是节点测试(如果Customer为元素>节点),则为 <TRUE。 
              not(child::ContactName) 是谓词。 在谓词中,child是轴,是ContactName节点测试(如果ContactName为元素>节点),则为 <TRUE。
使用缩写语法,还可以将 XPath 查询指定为:
Customer[not(ContactName)]  
选择谓词:示例 5
以下 XPath 表达式从当前上下文节点中选择具有 CustomerID 属性的所有 <Customer> 子级:
child::Customer[attribute::CustomerID]  
在此示例中,child轴是Customer节点测试(如果Customer为元素>节点),则为 <TRUE。 
              attribute::CustomerID 是谓词。 在谓词中,attribute是轴,CustomerID是谓词(如果CustomerID为属性>节点),则为< TRUE。
使用缩写语法,还可以将 XPath 查询指定为:
Customer[@CustomerID]  
选择谓词:示例 6
Microsoft SQLXML 4.0 包括对包含谓词中跨产品的 XPath 查询的支持,如以下示例所示:
Customer[Order/@OrderDate=Order/@ShipDate]  
此查询选择所有客户,其中OrderDate任何Order客户都等于ShipDate任何Order客户。