次の方法で共有


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

次の例は、XPath クエリで軸を指定する方法を示しています。

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

例示

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> ノードがchild軸のプライマリ ノードであるためです)。 <Customer> に一致するノードごとに、<Orders> に一致するノードが結果に追加されます。 結果セット <Order> のみが返されます。

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

/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. 使う。。 親軸を指定するには

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

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

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

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

XPath クエリは、次の内容に相当します。

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

<Order>の親がないため、XPath クエリ /Order[../@CustomerID="1"]はエラーを返します。 < 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. 属性軸を指定する

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

/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>