XPath クエリ内での関係演算子の指定 (SQLXML 4.0)
適用対象: SQL Server Azure SQL Database
以下の例では、XPath クエリに関係演算子を指定する方法を示します。 これらの例では、SampleSchema1.xml に格納されているマッピング スキーマに対して XPath クエリを指定しています。 このサンプル スキーマの詳細については、「 サンプル XPath Examples (SQLXML 4.0)の注釈付き XSD スキーマを参照してください。
例
A. 関係演算子を指定する
この XPath クエリは、<Customer> 要素の子要素を返します。CustomerID属性値は "1" で、子<Order>要素には、値が 3 より大きい OrderQty の子<OrderDetail>が含まれます。
/child::Customer[@CustomerID="1"]/Order/OrderDetail[@OrderQty > 3]
角かっこで指定された述語は、 <Customer> 要素をフィルター処理します。 OrderQty 属性値が 3 より大きい><OrderDetail孫が少なくとも 1 つ含まれる <Customer> 要素のみが返されます。
子軸が既定値です。 そのため、クエリは次のように指定できます。
/Customer[@CustomerID="1"]/Order/OrderDetail[@OrderQty > 3]
マッピング スキーマに対して XPath クエリをテストするには
サンプル スキーマ コードをコピーしテキスト ファイルに貼り付けます。 SampleSchema1.xml として保存します。
次のテンプレート (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 > 3] </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">
<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()]
Note
テンプレートでこのクエリを指定する場合、<文字はエンティティ エンコードする必要があります。これは、<
を使用して < 文字を指定します。
マッピング スキーマに対して XPath クエリをテストするには
サンプル スキーマ コードをコピーしテキスト ファイルに貼り付けます。 SampleSchema1.xml として保存します。
次のテンプレート (SpecifyRelationalB.xml) を作成し、SampleSchema1.xml を保存したディレクトリに保存します。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="SampleSchema1.xml"> /Customer/Order[(@SalesPersonID<270)=true()] </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-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>