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