Коллекции XPath

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

Коллекция всех элементов с определенным именем тега выражается с помощью самого этого имени тега. Для уточнения имени можно показать, что элементы выбираются из текущего контекста с помощью точки и символа косой черты (./), однако текущий контекст используется по умолчанию и нет необходимости отмечать его явно.

Примеры

Выражение Ссылается на

./first-name

Все элементы <first-name>. Обратите внимание, что это выражение эквивалентно следующему выражению.

first-name

Все элементы <first-name>.

Индексирование в коллекции

Выражения XPath позволяют легко запрашивать конкретный узел в наборе узлов. Просто заключите порядковый номер индекса в квадратные скобки. Порядковый номер отсчитывается от единицы (первый элемент — это цифра 1).

Символы квадратных скобок ([]) имеют более высокий приоритет, чем символы косой черты (/ и //). Дополнительные сведения см. в разделе Операторы и специальные символы.

Примеры

Выражение Ссылается на

author[1]

Первый элемент <author>.

author[first-name][3]

Третий элемент <author>, который имеет дочерний элемент <first-name>.

Обратите внимание, что индексы являются относительными к фильтруемому набору. Ниже приведен пример.

<x>
  <y/>
  <y/>
</x>
<x>
  <y/>
  <y/>
</x>

В следующей таблице показано, как выбирать конкретные элементы <x> и <y>.

Выражение Ссылается на

x/y[1]

Первый элемент <y> внутри каждого элемента <x>.

(x/y)[1]

Первый элемент <y> из всего набора элементов <y> внутри элементов <x>.

x[1]/y[1]

Первый элемент <y> внутри первого элемента <x>.

Приведенные выше примеры — это простые ссылки на коллекции XPath, в которых используются неявные значения по умолчанию, например ось child::. Для этой оси коллекция дочерних узлов индексируется в прямом порядке документа.

Для других осей, например ancestor::, следует явно указать имя оси в выражении XPath. Для этой оси коллекция предков индексируется в обратном порядке документа. Рассмотрим пример из предыдущей таблицы:

x/y[1]

Данное выражение эквивалентно приведенному ниже:

x/child::y[1]

Оба выражения означают «для каждого элемента <x> выбирать первый дочерний элемент с именем <y>»*.*

В следующем примере используется такой же синтаксис.

x/ancestor::y[1]

Словами этот пример можно выразить так: «для каждого элемента <x> выбирать первый его предок (в обратном порядке документа) с именем <y>». Синтаксис такой же, но порядок обратный.

Нахождение последнего элемента в коллекции

Функция last() возвращает значение True для последнего элемента в коллекции. Обратите внимание, что функция last относится к родительскому узлу.

Примеры

Выражение Ссылается на

book[last()]

Последний элемент <book>.

book/author[last()]

Последний элемент <author> внутри каждого элемента <book>.

(book/author)[last()]

Последний элемент <author> из всего набора элементов <author> внутри элементов <book>.

Группирование

С помощью круглых скобок операторы коллекции можно группировать для ясности, либо в случае, если для выражения операции не подходит обычный приоритет. Операторы группирования можно использовать при любых критериях фильтра (предикатах), например author[(degree or award)and publication]. Их также можно использовать в выражениях шага высшего уровня, например (book|magazine) или (author/degree | book/award). Их нельзя применять к выражениям шага более низкого уровня. Например, выражение author/(degree | award) недопустимо.

Примеры

Выражение Ссылается на

(book/author)

Все элементы <author>, которые являются дочерними элементами любого элемента <book> из текущего узла контекста.

author[(degree or award) and publication]

Все элементы <author>, которые содержат хотя бы один элемент <degree> или <award> и хотя бы один элемент <publication>.

См. также

Справочник

Примеры XPath

Понятия

Образец XML-файла с синтаксисом XPath (inventory.xml)