次の方法で共有


XPath クエリ内での関係演算子の指定 (SQLXML 4.0)

以下の例では、XPath クエリに関係演算子を指定する方法を示します。これらの例では、SampleSchema1.xml に格納されているマッピング スキーマに対して XPath クエリを指定しています。このサンプル スキーマの詳細については、「XPath の例で使用する注釈付き XSD スキーマのサンプル (SQLXML 4.0)」を参照してください。

A. 関係演算子を指定する

この XPath クエリでは、CustomerID 属性の値が "1" で、子要素 <Order>OrderQty 属性が 3 より大きい子 <OrderDetail> を含む、<Customer> 要素の子要素が返されます。

/child::Customer[@CustomerID="1"]/Order/OrderDetail[@OrderQty > 3]

ここでは、角かっこで指定される述語によって、<Customer> 要素がフィルタ選択され、OrderQty 属性値が 3 を超える孫 <OrderDetail> を少なくとも 1 つ含む <Customer> 要素だけが返されます。

child 軸は既定の軸です。したがって、クエリは次のように指定できます。

/Customer[@CustomerID="1"]/Order/OrderDetail[@OrderQty > 3]

マッピング スキーマに対して XPath クエリをテストするには

  1. サンプル スキーマ コードをコピーして、テキスト ファイルに貼り付け、SampleSchema1.xml として保存します。

  2. 次のテンプレート (SpecifyRelationalA.xml) を作成し、SampleSchema1.xml を保存したディレクトリに保存します。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="SampleSchema1.xml">
        /Customer[@CustomerID="1"]/Order/OrderDetail[@OrderQty &gt; 3]
      </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">
  <OrderDetail ProductID="Prod-760" UnitPrice="503.3507" OrderQty="4" UnitPriceDiscount="0" /> 
  <OrderDetail ProductID="Prod-763" UnitPrice="503.3507" OrderQty="4" UnitPriceDiscount="0" /> 
  <OrderDetail ProductID="Prod-766" UnitPrice="503.3507" OrderQty="4" UnitPriceDiscount="0" /> 
  <OrderDetail ProductID="Prod-732" UnitPrice="440.1742" OrderQty="4" UnitPriceDiscount="0" /> 
  <OrderDetail ProductID="Prod-757" UnitPrice="1049.7528" OrderQty="4" UnitPriceDiscount="0" /> 
</ROOT>

B. XPath クエリに関係演算子を指定し、論理関数を使用して結果を比較する

このクエリでは、SalesPersonID 属性値が 270 未満のコンテキスト ノードである、すべての <Order> 子要素を返します。

/child::Customer/child::Order[(attribute::SalesPersonID < 270)=true()]

attribute 軸は省略形 (@) で指定できます。また、child 軸は既定の軸なので、クエリから省略できます。

/Customer/Order[(@SalesPersonID < 270)=true()]
ms171792.note(ja-jp,SQL.90).gifメモ :
このクエリをテンプレート内に指定する場合は、XML ドキュメント内で特殊な意味を持つ文字 < を、エンティティとしてエンコードする必要があります。テンプレート内で文字 < を指定するには、&lt; を使用します。

マッピング スキーマに対して XPath クエリをテストするには

  1. サンプル スキーマ コードをコピーして、テキスト ファイルに貼り付け、SampleSchema1.xml として保存します。

  2. 次のテンプレート (SpecifyRelationalB.xml) を作成し、SampleSchema1.xml を保存したディレクトリに保存します。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
        <sql:xpath-query mapping-schema="SampleSchema1.xml">
            /Customer/Order[(@SalesPersonID&lt;270)=true()]
        </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">
  <Order SalesOrderID="Ord-46613" SalesPersonID="268" 
         OrderDate="2002-07-01T00:00:00" 
         DueDate="2002-07-13T00:00:00" 
         ShipDate="2002-07-08T00:00:00">
    <OrderDetail ProductID="Prod-739" UnitPrice="917.9363" 
                 OrderQty="2" UnitPriceDiscount="0" /> 
    <OrderDetail ProductID="Prod-779" UnitPrice="1491.4221" 
                 OrderQty="1" UnitPriceDiscount="0" /> 
    <OrderDetail ProductID="Prod-825" UnitPrice="242.1391" 
                 OrderQty="1" UnitPriceDiscount="0" /> 
  </Order>
  <Order SalesOrderID="Ord-71919" SalesPersonID="268" 
         OrderDate="2004-06-01T00:00:00" 
         DueDate="2004-06-13T00:00:00" 
         ShipDate="2004-06-08T00:00:00">
    <OrderDetail ProductID="Prod-961" UnitPrice="534.492" 
                 OrderQty="1" UnitPriceDiscount="0" /> 
    <OrderDetail ProductID="Prod-965" UnitPrice="534.492" 
                 OrderQty="1" UnitPriceDiscount="0" /> 
    <OrderDetail ProductID="Prod-966" UnitPrice="1716.5304" 
                 OrderQty="1" UnitPriceDiscount="0" /> 
  </Order>
  ...
</ROOT>