Коллекции 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>. |