在位置路径中指定选择谓词 (SQLXML 4.0)

谓词筛选与轴有关的节点集(类似于 SELECT 语句中的 WHERE 子句)。在方括号之间指定谓词。对于要筛选的节点集中的每个节点,将使用该节点作为上下文节点并使用节点集中的节点数作为上下文大小来对谓词表达式求值。如果对于该节点谓词表达式求值为 TRUE,则该节点将包含在结果节点集中。

XPath 还允许基于位置的筛选。求值结果为数字的谓词表达式选择该序数节点。例如,位置路径 Customer[3] 返回第三个客户。不支持此类数字谓词。只支持返回布尔值结果的谓词表达式。

注意注意

有关此 XPath 实现的限制以及它与 W3C 规范之间的区别的信息,请参阅XPath 查询使用简介 (SQLXML 4.0)

选择谓词:示例 1

以下 XPath 表达式(位置路径)从当前上下文节点选择 CustomerID 属性值为 ALFKI 的所有 <Customer> 元素子级:

/child::Customer[attribute::CustomerID="ALFKI"]

在此 XPath 查询中,child 和 attribute 是轴名称。Customer 是节点测试(如果 Customer 是 <element node>,则为 TRUE,因为 <element> 是 child 轴的主要节点类型)。attribute::CustomerID="ALFKI" 是谓词。在该谓词中,attribute 是轴,CustomerID 是节点测试(如果 CustomerID 是上下文节点的属性,则为 TRUE,因为 <attribute> 是 attribute 轴的主要节点类型)。

使用缩写语法,还可以将该 XPath 查询指定为:

/Customer[@CustomerID="ALFKI"]

选择谓词:示例 2

以下 XPath 表达式(位置路径)从当前上下文节点选择 SalesOrderID 属性值为 1 的所有 <Order> 孙级:

/child::Customer/child::Order[attribute::SalesOrderID="1"]

在此 XPath 表达式中,child 和 attribute 是轴名称。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 是 <element> 节点,则为 TRUE,因为 <element> 是 child 轴的主要节点类型)。child::ContactName 是谓词。在该谓词中,child 是轴,ContactName 是节点测试(如果 ContactName 是 <element> 节点,则为 TRUE)。

此表达式仅返回具有 <ContactName> 元素子级的上下文节点的 <Customer> 元素子级。

使用缩写语法,还可以将该 XPath 查询指定为:

Customer[ContactName]

选择谓词:示例 4

以下 XPath 表达式选择不具有 <ContactName> 元素子级的上下文节点的 <Customer> 元素子级:

child::Customer[not(child::ContactName)]

此示例假定 <ContactName> 是 XML 文档中 <Customer> 元素的子元素,在数据库中不需要 ContactName 字段。

在此示例中,child 是轴,Customer 是节点测试(如果 Customer 是 <element> 节点,则为 TRUE)。not(child::ContactName) 是谓词。在该谓词中,child 是轴,ContactName 是节点测试(如果 ContactName 是 <element> 节点,则为 TRUE)。

使用缩写语法,还可以将该 XPath 查询指定为:

Customer[not(ContactName)]

选择谓词:示例 5

以下 XPath 表达式从当前上下文节点选择具有 CustomerID 属性的所有 <Customer> 子级:

child::Customer[attribute::CustomerID]

在此示例中,child 是轴,Customer 是节点测试(如果 Customer 是 <element> 节点,则为 TRUE)。attribute::CustomerID 是谓词。在该谓词中,attribute 是轴,CustomerID 是节点测试(如果 CustomerID 是 <attribute> 节点,则为 TRUE)。

使用缩写语法,还可以将该 XPath 查询指定为:

Customer[@CustomerID]

选择谓词:示例 6

Microsoft SQLXML 4.0 可以支持谓词中包含叉积的 XPath 查询,如以下示例中所示:

Customer[Order/@OrderDate=Order/@ShipDate]

此查询选择具有以下 Order 的所有客户:其 OrderDate 等于任意 Order 的 ShipDate。