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


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

Область применения: SQL Server База данных SQL Azure

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

Примечание.

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

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

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

В следующем примере элемент child является осью, а Customer является проверкой узла. Основной тип узла для дочерней оси является< элементом>. Поэтому тест узла имеет значение 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() можно сократить до двух точек (..).