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


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

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

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

Примеры

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

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

/child::Person

В запросе child является осью, а Contact представляет собой проверку узла (значение TRUE, если Person является узлом <element>, поскольку <element> — это тип основного узла, связанный с осью child).

Ось child является осью по умолчанию. Поэтому указанный запрос может быть записан следующим образом:

/Person

Проверка запроса 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">
        /Person
      </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">

<Person BusinessEntityID="1" LastName="Achong" FirstName="Gustavo" Title="Mr." />

<Person BusinessEntityID="2" LastName="Abel" FirstName="Catherine" Title="Ms." />

<Person BusinessEntityID="3" LastName="Abercrombie" FirstName="Kim" Title="Ms." />

<Person BusinessEntityID="4" LastName="Acevedo" FirstName="Humberto" Title="Sr." />

...

</ROOT>

Б. Получение внучатых элементов контекстного узла

В следующем запросе 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="2005-08-01T00:00:00"

DueDate="2005-08-13T00:00:00"

ShipDate="2005-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>.

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

Следующий запрос получает все элементы <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="2005-08-01T00:00:00"

DueDate="2005-08-13T00:00:00"

ShipDate="2005-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 выбирает все дочерние элементы <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="2005-08-01T00:00:00"

DueDate="2005-08-13T00:00:00"

ShipDate="2005-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>