在 XPath 查询中指定布尔运算符 (SQLXML 4.0)

以下示例说明如何在 XPath 查询中指定布尔运算符。本示例中的 XPath 查询针对 SampleSchema1.xml 中包含的映射架构指定。有关该示例架构的信息,请参阅用于 XPath 示例的带批注的 XSD 架构示例 (SQLXML 4.0)

示例

A. 指定 OR 布尔运算符

此 XPath 查询返回 CustomerID 属性值为 13 或 31 的上下文节点的 <Customer> 元素子项:

/child::Customer[attribute::CustomerID="13" or attribute::CustomerID="31"]

可以指定指向 attribute 轴 (@) 的快捷方式,并且,由于 child 轴是默认的,因此可以忽略它:

/Customer[@CustomerID="13" or @CustomerID="31"]

在谓词中,attribute 是轴,而 CustomerID 是节点测试(如果 CustomerID<attribute> 节点,则为 TRUE,因为 <attribute> 节点是 attribute 轴的主节点)。谓词筛选 <Customer> 元素,并且只返回满足在谓词中指定的条件的元素。

针对映射架构测试 XPath 查询

  1. 复制示例架构代码,并将它粘贴到文本文件中。将该文件另存为 SampleSchema1.xml。

  2. 创建以下模板 (BooleanOperatorsA.xml) 并将其保存到保存 SampleSchema1.xml 的目录中。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="SampleSchema1.xml">
        /Customer[@CustomerID="13" or @CustomerID="31"]
      </sql:xpath-query>
    </ROOT>
    

    为映射架构 (SampleSchema1.xml) 指定的目录路径是相对于模板保存目录的相对路径。也可以指定绝对路径,例如:

    mapping-schema="C:\MyDir\SampleSchema1.xml"
    
  3. 创建并使用 SQLXML 4.0 测试脚本 (Sqlxml4test.vbs) 执行该模板。

    有关详细信息,请参阅使用 ADO 执行 SQLXML 4.0 查询

下面是执行该模板的结果集:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Customer CustomerID="13" SalesPersonID="286" TerritoryID="7" AccountNumber="13" CustomerType="S" /> 
  <Customer CustomerID="31" SalesPersonID="286" TerritoryID="7" AccountNumber="31" CustomerType="S" Orders="Ord-51803 Ord-69427">
    <Order SalesOrderID="Ord-51803" SalesPersonID="286" OrderDate="2003-08-01T00:00:00" DueDate="2003-08-13T00:00:00" ShipDate="2003-08-08T00:00:00">
      <OrderDetail ProductID="Prod-718" UnitPrice="1059.31" OrderQty="1" UnitPriceDiscount="0" /> 
      <OrderDetail ProductID="Prod-838" UnitPrice="1059.31" OrderQty="1" UnitPriceDiscount="0" /> 
    </Order>
    <Order SalesOrderID="Ord-69427" SalesPersonID="286" OrderDate="2004-05-01T00:00:00" DueDate="2004-05-13T00:00:00" ShipDate="2004-05-08T00:00:00">
      <OrderDetail ProductID="Prod-835" UnitPrice="440.1742" OrderQty="1" UnitPriceDiscount="0" /> 
    </Order>
  </Customer>
</ROOT>