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

谓词根据轴筛选节点集(类似于 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 是上下文节点的属性,因为 <属性> 是轴的主要 attribute 节点类型),则为 TRUE。

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

/Customer[@CustomerID="ALFKI"]  

选择谓词:示例 2

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

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

在此 XPath 表达式中attributechild是轴名称。 CustomerOrder节点测试。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客户。

另请参阅

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