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


Задание проверки узла в пути доступа (SQLXML 4.0)

Применимо к:база данных SQL ServerAzure SQL

Проверка узла задает тип узла, выбранного на шаге доступа. Каждая ось (дочерняя, родительская, атрибутная или самостоятельная) имеет тип основного узла. Для оси атрибутов основным типом узла является <attribute>. Для родительского, дочернего и самостоятельного осей основного узла используется <тип element>.

Примечание

Шаблон проверки узла * (например child::*) не поддерживается.

Тест узла: пример 1

Путь к child::Customer расположению выбирает дочерние <элементы customer> узла контекста.

В следующем примере элемент child является осью, а Customer является проверкой узла. Тип основного узла для дочерней оси — <element>. Поэтому проверка узла имеет значение TRUE, если <узел Customer> является <узлом элемента> . Если узел контекста не <имеет дочерних элементов Customer> , возвращается пустой набор узлов.

Тест узла: пример 2

Путь к attribute::CustomerID расположению выбирает атрибут CustomerID узла контекста.

В этом примере элемент attribute является осью, а CustomerID является проверкой узла. Основным типом узла оси атрибутов является <атрибут>. Таким образом, проверка узла имеет значение TRUE, если CustomerID является узлом атрибута<>. Если узел контекста не имеет CustomerID, возвращается пустой набор узлов.

Примечание

В этой реализации XPath, если шаг расположения ссылается на <элемент> или тип атрибута<>, который не объявлен в схеме, возникает ошибка. Это отличается от реализации XPath в MSXML, где возвращается пустое множество узлов.

Сокращенный синтаксис осей

Поддерживается следующий сокращенный синтаксис пути доступа.

  • attribute:: можно сократить до @.

    Путь доступа Customer[@CustomerID="ALFKI"] аналогичен выражению child::Customer[attribute::CustomerID="ALFKI"].

  • child:: можно исключить из шага определения расположения данных.

    Таким образом, дочерний элемент является осью по умолчанию. Путь доступа Customer/Order аналогичен выражению child::Customer/child::Order.

  • self::node() можно сократить до одной точки (.), а parent::node() можно сократить до двух точек (..).