在 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 查詢
複製範例結構描述程式碼,並將其貼至文字檔中。 將檔案儲存為 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.
[!附註]
XPath 查詢 /Order[../@CustomerID="1"] 將會傳回錯誤,因為沒有 <Order> 的父系。 雖然在對應結構描述中可能有包含 <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 或 31,選取內容節點的所有 <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>