在 XPath 查詢中指定座標軸 (SQLXML 4.0)

適用於:SQL ServerAzure SQL 資料庫

下列範例示範如何在 XPath 查詢中指定座標軸。

這些範例中的 XPath 查詢會針對包含在SampleSchema1.xml中的對應架構來指定。 如需此範例架構的相關信息,請參閱 XPath 範例的範例 XSD 架構範例(SQLXML 4.0)。

範例

A. 擷取內容節點的子專案

下列 XPath 查詢會選取內容節點的所有 <Contact> 子元素:

/child::Contact  

在查詢中,child是座標軸,而且Contact是節點測試(如果 Contact 為<項目>節點,則為 TRUE,因為<元素>是與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是座標軸,而且Order是節點測試(如果 Customer 和 Customer Order 是元素>節點,則這些節點測試為 TRUE,因為<元素>節點是<子軸的主要節點)。 針對符合客戶的>每個節點<,會將符合<訂單的>節點新增至結果。 結果集中只會傳回 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. 用。。 指定父軸

下列查詢會擷取具有 CustomerID 屬性值為 1 之父< Customer> 元素的所有< Order> 元素 查詢會使用述詞中的子軸來尋找 Order> 元素的<父系。

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

軸是預設座標軸。 因此,查詢可以指定為:

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

XPath 查詢相當於:

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

注意

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. 指定屬性軸

下列 XPath 查詢會選取具有 CustomerID 屬性值 1 之內容節點的所有< Customer> 子元素:

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

在述 attribute::CustomerID詞中, attribute 是座標軸,而且 CustomerID 是節點測試(如果 CustomerID 是節點測試的屬性,則為TRUE,因為 <屬性> 節點是座標軸的主要節點 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>