在位置路径中指定选择谓词 (SQLXML 4.0)
适用于: SQL Server Azure SQL 数据库
谓词筛选与轴有关的节点集(类似于 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 是上下文节点的属性,因为<属性>是属性轴的主要节点类型),则为 TRUE。
使用缩写语法,还可以将该 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
为<元素>节点,则为 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]
此查询选择具有以下 Order
的所有客户:其 OrderDate
等于任意 ShipDate
的 Order
。