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


Шаги доступа

Шаг определения расположения задает набор узлов (node-set) по отношению к узлу контекста.

Шаг доступа состоит из трех частей: необязательной оси, проверки узла и необязательного предиката. Синтаксис шага определения расположения выглядит следующим образом: имя оси, двойное двоеточие, элемент проверки узла, нуль либо дополнительные предикаты, каждый из которых заключен в квадратные скобки. Базовая форма синтаксиса имеет следующий вид.

axis::nodetest[predicate]
  • axis
    Определяет древовидную связь между узлом контекста и узлами, которые выбираются шагом определения расположения. Другими словами, ось указывает общее направление, в котором выполняется шаг определения расположения по отношению к узлу контекста. В шаге определения расположения ось является необязательным элементом. Если не указать ось, по умолчанию ей присваивается значение child::. Кроме того, некоторые оси имеют ярлыки, например символ @ является ярлыком для оси атрибутов.
  • nodetest
    Определяет тип узла либо развернутое имя узлов, которые изначально выбираются шагом определения расположения. В первую очередь проверка узла определяет, какие из всех узлов на указанной оси являются кандидатами, то есть потенциально подходящими узлами для шага определения расположения.
  • predicate
    Использует выражение XPath (условие, которое должно быть выполнено) для дальнейшего уточнения набора узлов, выбранного шагом определения расположения. Предикат представляет собой фильтр, который определяет критерий выбора для дальнейшего уточнения списка узлов-кандидатов. Предикат является необязательным элементом. Если предикат не указан, в шаге определения расположения нет квадратных скобок ([ ]).

Выбор узлов

Набор узлов, выбираемый шагом определения расположения, является результатом создания исходного набора узлов, основанного на связи между осью и проверкой узла, и последующей фильтрации исходного набора по каждому включенному предикату.

Исходный набор состоит из узлов, для которых выполняются два следующих условия.

  • Узлы имеют связь с узлом контекста, заданным осью.

  • Узлы имеют тип и развернутое имя, заданное проверкой узла.

Затем выражение XPath использует первый предикат в шаге определения расположения, выполняя фильтрацию исходного набора узлов для создания нового набора узлов. Далее выражение XPath использует второй предикат для фильтрации набора узлов, полученного с помощью первого предиката. Процесс фильтрации повторяется до тех пор, пока выражение XPath не оценит все предикаты. Набор узлов, полученный в результате применения всех предикатов, является набором узлов, выбранным шагом определения расположения.

ms256472.note(ru-ru,VS.100).gifПримечание
Так как ось влияет на оценку выражения в каждом предикате, семантика предиката определяется в соответствии с заданной осью.

В следующей таблице приведены некоторые образцы шагов определения расположения с использованием полного синтаксиса.

Шаг определения расположения Описание

child::*[position()=1]

Определяет расположение первого дочернего узла для узла контекста.

ancestor-or-self::book[@catdate="2000-12-31"]

Определяет расположение всех предков любого дочернего узла <book> контекстного узла, а также расположение самого дочернего узла <book> при условии, что элемент в вопросе содержит атрибут catdate со значением "2000-12-31".

//parent::node()[name()="book"] | descendant::node()[name()="author"]

Определяет расположение в документе любого узла, чей родительский узел имеет имя «book», либо любого другого узла, являющегося потомком узла контекста с именем «author».

См. также

Справочник

Оси
Проверки узлов
Предикаты