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


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

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

В данных примерах запросы XPath определены в соответствии со схемой сопоставления, которая содержится в файле SampleSchema1.xml. Сведения об этом образце схемы см. в разделе Образец схемы XSD с заметками для примеров XPath (SQLXML 4.0).

Примеры

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

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

/child::Contact

В запросе child является осью, а Contact – проверкой узла (значение TRUE, если Contact является узлом <element>, поскольку <element> – это тип основного узла, связанный с осью 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 выбирает все дочерние элементы <Order> дочерних элементов <Customer> контекстного узла:

/child::Customer/child::Order

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

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

C. Использование .. для указания родительской оси

Следующий запрос получает все элементы <Order>, имеющие родительский элемент <Customer>, с атрибутом CustomerID, имеющим значение 1. Запрос использует ось 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 к схеме сопоставления

  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 выбирает все дочерние элементы <Customer> контекстного узла со значением атрибута CustomerID, равным 1:

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

В предикате attribute::CustomerID элемент attribute является осью, а CustomerID – проверкой узла (если CustomerID атрибут, проверка узла возвращает значение TRUE, поскольку узел <attribute> является основным узлом для оси 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>