在位置路径中指定选择谓词 (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 查询中,childattribute 是轴名称。 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 表达式中,childattribute 是轴名称。 CustomerOrderSalesOrderID 是节点测试。 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 等于任意 ShipDateOrder

另请参阅

带批注的 XSD 架构简介 (SQLXML 4.0)
客户端 XML 格式化 (SQLXML 4.0)