Поделиться через


Указание осей в запросах XPath (SQLXML 4.0)

В следующих примерах показано, как указываются оси в запросах XPath.

Запросы XPath в этих примерах указываются в схеме сопоставления, содержащейся в SampleSchema1.xml. Дополнительные сведения об этой схеме см. в примере аннотированной схемы XSD для примеров XPath (SQLXML 4.0).

Примеры

А. Получение дочерних элементов узла контекста

Следующий запрос XPath выбирает все дочерние <элементы контакта> узла контекста:

/child::Contact  

В запросе используется ось и Contact является тестом узла (TRUE, child если Contact является <узлом элемента>, так как <элемент> является основным типом узла, связанным с 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>  

В. Получение внуков узла контекста

Следующий запрос XPath выбирает все дочерние <элементы Order> дочерних <элементов элемента Customer> узла контекста:

/child::Customer/child::Order  

В запросе используется ось и CustomerOrder выполняются тесты узлов (эти тесты узлов являются TRUE, child если customer и Order являются <узлами элементов>, так как <узел элемента> является основным узлом для child оси). Для каждого узла, соответствующего <клиенту>, узлы, соответствующие <заказы> , добавляются в результат. В результирующем наборе возвращается только <порядок> .

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, из каждого узла, соответствующего <Клиенту,> запрос переходит к его <элементам Order> . И для каждого соответствующего узла< запрос добавляет узлы OrderDetail>>в результат.< В результирующем наборе возвращается только <OrderDetail> .

С. Использование.. Указание родительской оси

Следующий запрос извлекает все <элементы Order> с родительским <элементом Customer> со значением атрибута CustomerID 1. Запрос использует child ось в предикате для поиска родительского <элемента Order> .

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

child Ось — это ось по умолчанию. Таким образом, запрос можно указать следующим образом:

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

Запрос XPath эквивалентен следующему:

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

Замечание

Запрос /Order[../@CustomerID="1"] XPath возвращает ошибку, так как родительский <элемент 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>  

Д. Указание оси атрибутов

Следующий запрос XPath выбирает все дочерние <элементы клиента> узла контекста со значением атрибута CustomerID 1:

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

В предикате attribute::CustomerIDattribute является осью и 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>