Указание осей в запросах XPath (SQLXML 4.0)
Область применения: SQL Server База данных SQL Azure
В следующих примерах показано, как задаются оси в запросах XPath.
В данных примерах запросы XPath определены в соответствии со схемой сопоставления, которая содержится в файле SampleSchema1.xml. Дополнительные сведения об этой схеме см. в примере аннотированной схемы XSD для примеров XPath (SQLXML 4.0).
Примеры
А. Получение дочерних элементов контекстного узла
Следующий запрос XPath выбирает все дочерние <элементы контакта> узла контекста:
/child::Contact
В запросе используется ось и является тестом узла (TRUE, child
если Contact
является <узлом элемента>, так как <элемент> является основным типом узла, связанным с child
осей).Contact
Ось 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 выбирает все дочерние элементы Order> дочерних <элементов элемента Customer> узла контекста:<
/child::Customer/child::Order
В запросе используется ось и Customer
Order
выполняются тесты узлов (эти тесты узла являются TRUE, child
если customer и Order являются <узлами элементов>, так как< узел элемента> является основным узлом для дочерней оси). Для каждого узла, соответствующего <клиенту>, узлы, соответствующие< заказы>, добавляются в результат. В результирующем наборе возвращается только <порядок> .
Ось дочернего объекта по умолчанию. Поэтому запрос можно определить следующим образом.
/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
, из каждого узла, соответствующего< Клиенту,> запрос переходит к его <элементам Order>. И для каждого соответствующего узла запрос добавляет узлы< OrderDetail>> в результат.< В результирующем наборе возвращается только OrderDetail>.<
В. Использование символов . для указания родительской оси
Следующий запрос извлекает все <элементы Order> с родительским< элементом Customer> со значением атрибута CustomerID 1. Запрос использует дочернюю ось в предикате для поиска родительского <элемента Order>.
/child::Customer/child::Order[../@CustomerID="1"]
Дочерняя ось — это ось по умолчанию. Поэтому запрос можно определить следующим образом.
/Customer/Order[../@CustomerID="1"]
Этот запрос XPath эквивалентен следующему:
/Customer[@CustomerID="1"]/Order.
Примечание.
Запрос /Order[../@CustomerID="1"]
XPath возвращает ошибку, так как родительский <элемент 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:
/child::Customer[attribute::CustomerID="1"]
В предикате attribute::CustomerID
attribute
является осью и CustomerID
является тестом узла (если CustomerID
это атрибут теста узла имеет значение TRUE, так как <узел атрибута> является основным узлом для 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>