次の例は、XPath クエリで軸を指定する方法を示しています。
これらの例の XPath クエリは、SampleSchema1.xmlに含まれるマッピング スキーマに対して指定されます。 このサンプル スキーマの詳細については、「 XPath のサンプル注釈付き XSD スキーマ (SQLXML 4.0)」を参照してください。
例示
A。 コンテキスト ノードの子要素を取得する
次の XPath クエリでは、コンテキスト ノードのすべての <Contact> 子要素が選択されます。
/child::Contact
クエリでは、 child
は軸であり、 Contact
はノード テストです ( Contact
が <element> ノードの場合は TRUE、 <element> は child
軸に関連付けられたプライマリ ノード タイプであるため)。
child
軸が既定値です。 そのため、クエリは次のように記述できます。
/Contact
マッピング スキーマに対して XPath クエリをテストするには
サンプル スキーマ コードをコピーし、テキスト ファイルに貼り付けます。 ファイルを SampleSchema1.xmlとして保存します。
次のテンプレート (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"
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 クエリをテストするには
サンプル スキーマ コードをコピーし、テキスト ファイルに貼り付けます。 ファイルを SampleSchema1.xmlとして保存します。
次のテンプレート (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"
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 クエリをテストするには
サンプル スキーマ コードをコピーし、テキスト ファイルに貼り付けます。 ファイルを SampleSchema1.xmlとして保存します。
次のテンプレート (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"
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 クエリをテストするには
サンプル スキーマ コードをコピーし、テキスト ファイルに貼り付けます。 ファイルを SampleSchema1.xmlとして保存します。
次のテンプレート (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"
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>