Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Предикат фильтрует набор узлов относительно оси (аналогично предложению WHERE в инструкции SELECT). Предикат указывается между скобками. Для каждого узла в фильтруемом наборе узлов выражение предиката вычисляется с этим узлом как узлом контекста с числом узлов в наборе узлов в виде размера контекста. Если выражение предиката оценивается как TRUE для этого узла, узел включается в результирующий набор узлов.
XPath также позволяет фильтровать на основе позиций. Выражение предиката, которое оценивается на число, выбирает этот порядковый узел. Например, путь Customer[3]
к расположению возвращает третьего клиента. Такие числовые предикаты не поддерживаются. Поддерживаются только выражения предиката, возвращающие логический результат.
Замечание
Сведения об ограничениях этой реализации XPath xPath и различиях между ней и спецификацией W3C см. в разделе "Общие сведения об использовании запросов XPath" (SQLXML 4.0).
Предикат выбора: пример 1
Следующее выражение XPath (путь к расположению) выбирает из текущего узла контекста все <дочерние элементы Customer> , имеющие атрибут CustomerID со значением ALFKI:
/child::Customer[attribute::CustomerID="ALFKI"]
В этом запросе child
XPath и attribute
являются именами осей.
Customer
— это тест узла (TRUE, если Customer
является <узлом> элемента, так как <элемент> является основным типом узла для child
оси).
attribute::CustomerID="ALFKI"
— предикат. В предикате является осью и CustomerID
является тестом узла (TRUE, attribute
если CustomerID является атрибутом узла контекста, так как <атрибут> является основным типом узла осиattribute
).
Используя сокращенный синтаксис, можно также указать запрос XPath следующим образом:
/Customer[@CustomerID="ALFKI"]
Предикат выбора: пример 2
Следующее выражение XPath (путь к расположению) выбирает из текущего узла контекста все <внуки заказа> , имеющие атрибут SalesOrderID со значением 1:
/child::Customer/child::Order[attribute::SalesOrderID="1"]
В этом выражении child
XPath и attribute
являются именами осей.
Customer
, Order
и SalesOrderID
являются тестами узла.
attribute::OrderID="1"
— предикат.
Используя сокращенный синтаксис, можно также указать запрос XPath следующим образом:
/Customer/Order[@SalesOrderID="1"]
Предикат выбора: пример 3
Следующее выражение XPath (путь к расположению) выбирает из текущего узла контекста все <дочерние элементы Customer> , имеющие один или несколько дочерних <элементов ContactName> :
child::Customer[child::ContactName]
В этом примере предполагается, что <ContactName> является дочерним элементом <элемента Customer> в XML-документе , который называется сопоставлением с элементом в аннотированной схеме XSD.
В этом выражении child
XPath — это имя оси.
Customer
— это тест узла (TRUE, если Customer
является <узлом элемента> , так как <элемент> является основным типом узла для child
оси).
child::ContactName
— предикат. В предикате child
находится ось и ContactName
является тестом узла (TRUE, если ContactName
является <узлом элемента> ).
Это выражение возвращает только дочерние <элементы Customer> узла контекста с <дочерними элементами ContactName> .
Используя сокращенный синтаксис, можно также указать запрос XPath следующим образом:
Customer[ContactName]
Предикат выбора: пример 4
Следующее выражение XPath выбирает <дочерние элементы Customer> узла контекста, у которых нет <дочерних элементов ContactName> :
child::Customer[not(child::ContactName)]
В этом примере предполагается, что <ContactName> является дочерним элементом <элемента Customer> в XML-документе, а поле ContactName не требуется в базе данных.
В этом примере child
— ось.
Customer
— это тест узла (TRUE, если Customer
является <узлом элемента> ).
not(child::ContactName)
— предикат. В предикате child
находится ось и ContactName
является тестом узла (TRUE, если ContactName
является <узлом элемента> ).
Используя сокращенный синтаксис, можно также указать запрос XPath следующим образом:
Customer[not(ContactName)]
Предикат выбора: пример 5
Следующее выражение XPath выбирает из текущего узла контекста все <дочерние элементы Customer> , имеющие атрибут CustomerID :
child::Customer[attribute::CustomerID]
В этом примере используется ось и тест узла (TRUE, child
если Customer
является <узлом элемента>).Customer
attribute::CustomerID
— предикат. В предикате является осью и CustomerID
является предикатом (TRUE, attribute
если CustomerID
является <узлом атрибута>).
Используя сокращенный синтаксис, можно также указать запрос XPath следующим образом:
Customer[@CustomerID]
Предикат выбора: пример 6
Microsoft SQLXML 4.0 включает поддержку запросов XPath, содержащих кросс-продукт в предикате, как показано в следующем примере:
Customer[Order/@OrderDate=Order/@ShipDate]
Этот запрос выбирает всех клиентов с любым Order
, для которого OrderDate
равны ShipDate
любой из Order
них.
См. также
Общие сведения о аннотированных схемах XSD (SQLXML 4.0)
Форматирование XML на стороне клиента (SQLXML 4.0)