XPath クエリ内での軸の指定 (SQLXML 4.0)

適用対象: SQL Server Azure SQL Database

以下の例では、XPath クエリに軸を指定する方法を示します。

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

A. コンテキスト ノードの子要素を取得する

次の XPath クエリでは、コンテキスト ノードのすべての <Contact> 子要素が選択されます。

/child::Contact  

クエリでは、 child は軸であり、 Contact はノード テストです ( Contact<element> ノードの場合は TRUE、 <element> は child 軸に関連付けられたプライマリ ノード タイプであるため)。

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

/Contact  
マッピング スキーマに対して XPath クエリをテストするには
  1. サンプル スキーマ コードをコピーしテキスト ファイルに貼り付けます。 SampleSchema1.xml として保存します。

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

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
      <sql:xpath-query mapping-schema="SampleSchema1.xml">  
        /Contact  
      </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">   
  <Contact ContactID="1" LastName="Achong" FirstName="Gustavo" Title="Mr." />   
  <Contact ContactID="2" LastName="Abel" FirstName="Catherine" Title="Ms." />   
  <Contact ContactID="3" LastName="Abercrombie" FirstName="Kim" Title="Ms." />   
  <Contact ContactID="4" LastName="Acevedo" FirstName="Humberto" Title="Sr." />  
  ...  
</ROOT>  

B. コンテキスト ノードの孫を取得する

次の XPath クエリでは、コンテキスト ノードの <Customer> 要素の子のすべての <Order> 要素の子が選択されます。

/child::Customer/child::Order  

クエリでは、 child は軸と Customer であり、 Order はノード テストです (Customer と Order が <element の場合、これらのノード テストは TRUE になります> ノードは、 <element> ノードが 軸のプライマリ ノードであるためです)。 <Customer> に一致するノードごとに、<Orders> に一致するノードが結果に追加されます。 結果セット <Order> のみが返されます。

軸が既定値です。 そのため、クエリは次のように指定できます。

/Customer/Order  
マッピング スキーマに対して XPath クエリをテストするには
  1. サンプル スキーマ コードをコピーしテキスト ファイルに貼り付けます。 SampleSchema1.xml として保存します。

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

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
      <sql:xpath-query mapping-schema="SampleSchema1.xml">  
        /Customer/Order  
      </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-43860" SalesPersonID="280"   
         OrderDate="2001-08-01T00:00:00"   
         DueDate="2001-08-13T00:00:00"   
         ShipDate="2001-08-08T00:00:00">  
  <OrderDetail ProductID="Prod-729" UnitPrice="226.8571"   
               OrderQty="1" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-732" UnitPrice="440.1742"   
               OrderQty="1" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-738" UnitPrice="220.2496"   
               OrderQty="1" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-753" UnitPrice="2576.3544"   
               OrderQty="2" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-756" UnitPrice="1049.7528"   
               OrderQty="1" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-758" UnitPrice="1049.7528"   
               OrderQty="2" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-761" UnitPrice="503.3507"   
               OrderQty="2" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-762" UnitPrice="503.3507"   
               OrderQty="1" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-763" UnitPrice="503.3507"   
               OrderQty="1" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-765" UnitPrice="503.3507"   
               OrderQty="2" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-768" UnitPrice="503.3507"   
               OrderQty="1" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-770" UnitPrice="503.3507"   
               OrderQty="1" UnitPriceDiscount="0" />   
  </Order>  
   ...  
</ROOT>  

XPath クエリが Customer/Order/OrderDetail として指定されている場合、 <Customer に一致する各ノードから> クエリはその <Order> 要素に移動します。 また、 <Order> に一致するノードごとに、クエリによってノード <OrderDetail> が結果に追加されます。 結果セット <OrderDetail> のみが返されます。

C: .. を使用して parent 軸を指定する

次のクエリでは、CustomerID 属性値が 1 の親 <Customer> 要素を持つすべての <Order> 要素を取得します。 このクエリでは、述語の child 軸を使用して、 <Order> 要素の親を検索します。

/child::Customer/child::Order[../@CustomerID="1"]  

軸が既定の軸です。 そのため、クエリは次のように指定できます。

/Customer/Order[../@CustomerID="1"]  

この XPath クエリは、次の指定と同じです。

/Customer[@CustomerID="1"]/Order.  

Note

XPath クエリ /Order[../@CustomerID="1"] は、 <Order> の親がないため、エラーを返します。 <Order> を含む要素がマッピング スキーマに存在する可能性がありますが、XPath はいずれの要素でも開始されませんでした。したがって、<Order> はドキュメント内の最上位の要素型と見なされます。

マッピング スキーマに対して XPath クエリをテストするには
  1. サンプル スキーマ コードをコピーしテキスト ファイルに貼り付けます。 SampleSchema1.xml として保存します。

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

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
      <sql:xpath-query mapping-schema="SampleSchema1.xml">  
        /Customer/Order[../@CustomerID="1"]  
      </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-43860" SalesPersonID="280"   
         OrderDate="2001-08-01T00:00:00"   
         DueDate="2001-08-13T00:00:00"   
         ShipDate="2001-08-08T00:00:00">  
  <OrderDetail ProductID="Prod-729" UnitPrice="226.8571"   
               OrderQty="1" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-732" UnitPrice="440.1742"   
               OrderQty="1" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-738" UnitPrice="220.2496"   
               OrderQty="1" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-753" UnitPrice="2576.3544"   
               OrderQty="2" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-756" UnitPrice="1049.7528"   
               OrderQty="1" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-758" UnitPrice="1049.7528"   
               OrderQty="2" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-761" UnitPrice="503.3507"   
               OrderQty="2" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-762" UnitPrice="503.3507"   
               OrderQty="1" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-763" UnitPrice="503.3507"   
               OrderQty="1" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-765" UnitPrice="503.3507"   
               OrderQty="2" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-768" UnitPrice="503.3507"   
               OrderQty="1" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-770" UnitPrice="503.3507"   
               OrderQty="1" UnitPriceDiscount="0" />   
  </Order>  
   ...  
</Order>  
</ROOT>  

D. attribute 軸を指定する

次の XPath クエリでは、コンテキスト ノードのすべての <Customer> 子要素が選択され、 CustomerID 属性値が 1 になります。

/child::Customer[attribute::CustomerID="1"]  

述語 attribute::CustomerIDでは、 attribute は軸、 CustomerID はノード テストです ( CustomerID が属性の場合、ノード テストは TRUE です。 <attribute> ノードは attribute 軸のプライマリ ノードであるため)。

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

/Customer[@CustomerID="1"]  
マッピング スキーマに対して XPath クエリをテストするには
  1. サンプル スキーマ コードをコピーしテキスト ファイルに貼り付けます。 SampleSchema1.xml として保存します。

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

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
      <sql:xpath-query mapping-schema="SampleSchema1.xml">  
        child::Customer[attribute::CustomerID="1"]  
      </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="1" SalesPersonID="280"   
            TerritoryID="1" AccountNumber="1"   
            CustomerType="S" Orders="Ord-43860 Ord-44501 Ord-45283 Ord-46042">  
    <Order SalesOrderID="Ord-43860" SalesPersonID="280"   
           OrderDate="2001-08-01T00:00:00"   
           DueDate="2001-08-13T00:00:00"   
           ShipDate="2001-08-08T00:00:00">  
       <OrderDetail ProductID="Prod-729" UnitPrice="226.8571"   
                    OrderQty="1" UnitPriceDiscount="0" />   
       <OrderDetail ProductID="Prod-732" UnitPrice="440.1742"   
                    OrderQty="1" UnitPriceDiscount="0" />   
       <OrderDetail ProductID="Prod-738" UnitPrice="220.2496"   
                    OrderQty="1" UnitPriceDiscount="0" />   
      ...   
    </Order>  
   ...  
  </Customer>  
</ROOT>