Указание осей в запросах 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 к схеме сопоставления
Скопируйте образец кода схемы и вставьте его в текстовый файл. Сохраните файл с именем 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
В запросе child является осью, а Customer и Order – проверками узлов (значение TRUE, если Customer и Order имеют тип <element>, поскольку узел <element> является основным узлом для оси child). Для каждого узла, соответствующего <Customer>, к результату добавляются узлы, соответствующие <Orders>. В результирующем наборе возвращается только <Order>.
Ось child является осью по умолчанию. Поэтому запрос можно определить следующим образом.
/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, из каждого узла, соответствующему <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 к схеме сопоставления
Скопируйте образец кода схемы и вставьте его в текстовый файл. Сохраните файл с именем 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 выбирает все дочерние элементы <Customer> контекстного узла со значением атрибута CustomerID, равным 1:
/child::Customer[attribute::CustomerID="1"]
В предикате attribute::CustomerID элемент attribute является осью, а CustomerID – проверкой узла (если CustomerID атрибут, проверка узла возвращает значение TRUE, поскольку узел <attribute> является основным узлом для оси 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>