Вы здесь

Оси XPath

Пример XML документа

Для демонстрации осей XPath будет использоваться следующий XML документ.


<?xml version="1.0" encoding="UTF-8"?>
<messages>
   <note>
      <heading  date="10/01/2008">Напоминание</heading>
      <body>Отправить письмо!</body>
   </note>
   <note>
      <heading  date="11/01/2008">Re: Напоминание</heading>
      <body>Письмо отправлено</body>
   </note>
</messages>

Оси XPath

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

Название оси Результат
ancestor Выбирает всех предков текущего узла
ancestor-or-self Выбирает всех предков текущего узла и сам текущий узел
attribute Выбирает все атрибуты текущего узла
child Выбирает всех прямых потомков текущего узла
descendant Выбирает всех потомков текущего узла
descendant-or-self Выбирает всех потомков текущего узла и сам текущий узел
following Выбирает все элементы в документе после закрывающего тега текущего узла
following-sibling Выбирает все элементы одного уровня после текущего узла
namespace Выбирает все узлы пространства имен текущего узла
parent Выбирает родителя текущего узла
preceding Выбирает все узлы, которые появляются перед текущим узлом, за исключением предков, узлов атрибутов и пространства имен
preceding-sibling Выбирает все элементы одного уровня до текущего узла
self Выбирает текущий узел

Выражение пути выборки

Путь выборки может быть абсолютным или относительным.

Абсолютный путь выборки начинается с символа косой черты ( / ), а относительный нет. В обоих случаях такой путь содержит один или более шагов, разделенных косой чертой:


Абсолютный путь:

 /шаг/шаг/...

Относительный путь:

 шаг/шаг/...

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

Шаг содержит:

  • ось (определяет древовидное отношение между выбранными узлами и текущим узлом)
  • проверка узла (определяет узел внутри оси)
  • ноль или больше предикатов (для более точного указания выбранного узлового набора)

Синтаксис для шага выборки имеет следующий вид:


 имяОси::проверкаУзла[предикат]

Примеры

Пример Результат
child::note Выбирает все узлы note, которые являются прямыми потомками текущего узла
attribute::date Выбирает атрибут date текущего узла
child::* Выбирает всех прямых потомков текущего узла
attribute::* Выбирает все атрибуты текущего узла
child::text() Выбирает все текстовые узлы текущего узла
child::node() Выбирает всех прямых потомков текущего узла
descendant::note Выбирает всех потомков note текущего узла
ancestor::note Выбирает всех предков note текущего узла
ancestor-or-self::note Выбирает всех предков note текущего узла, а также сам текущий узел, если это узел note
child::*/child::heading Выбирает всех прямых потомков прямых потомков ("внуков") heading текущего узла