Коллекции XPath
В коллекциях, возвращаемых запросами XPath, сохраняется порядок, иерархия и идентификатор в той степени, в которой они определены. То есть коллекция элементов возвращается в порядке документов без повторяющихся элементов. Поскольку по определению атрибуты являются неупорядоченными, отсутствует неявный порядок атрибутов, возвращаемых для конкретного элемента.
Коллекция всех элементов с определенным именем тега выражается с помощью самого этого имени тега. Чтобы квалифицировать его, следует показать, что элементы выбраны из текущего контекста с помощью точки и символа косой черты (./
), однако текущий контекст используется по умолчанию и нет необходимости отмечать его явно.
Примеры
Выражение | Ссылается на |
---|---|
|
Все элементы |
|
Все элементы |
Индексирование в коллекции
Выражения XPath позволяют легко запрашивать конкретный узел в наборе узлов. Просто заключите порядковый номер индекса в квадратные скобки. Порядковый номер отсчитывается от единицы (первый элемент — это цифра 1).
Символы квадратных скобок ([]
) имеют более высокий приоритет, чем символы косой черты (/
и //
). Дополнительные сведения см. в разделе Операторы и специальные символы.
Примеры
Выражение | Ссылается на |
---|---|
|
Первый элемент |
|
Третий элемент |
Обратите внимание, что индексы являются относительными к фильтруемому набору. Ниже приведен пример.
<x>
<y/>
<y/>
</x>
<x>
<y/>
<y/>
</x>
В следующей таблице показано, как выбирать конкретные элементы <x>
и <y>
.
Выражение | Ссылается на |
---|---|
|
Первый элемент |
|
Первый элемент |
|
Первый элемент |
Приведенные выше примеры — это простые ссылки на коллекции XPath, в которых используются неявные значения по умолчанию, например ось child::
. Для этой оси коллекция дочерних элементов индексируется в прямом порядке документа.
Для других осей, например ancestor::
, следует явно указать имя оси в выражении XPath. Для этой оси коллекция предков индексируется в обратном порядке документа. Рассмотрим пример из предыдущей таблицы:
x/y[1]
Данное выражение эквивалентно приведенному ниже:
x/child::y[1]
Оба выражения означают «для каждого элемента <x>
выбирать первый дочерний элемент с именем <y>
»*.*
В следующем примере используется такой же синтаксис.
x/ancestor::y[1]
Словами этот пример можно выразить так: «для каждого элемента <x>
выбирать первый его предок (в обратном порядке документа) с именем <y>
». Синтаксис такой же, но порядок обратный.
Нахождение последнего элемента в коллекции
Функция last() возвращает значение True для последнего элемента в коллекции. Обратите внимание, что функция last
относится к родительскому узлу.
Примеры
Выражение | Ссылается на |
---|---|
|
Последний элемент |
|
Последний элемент |
|
Последний элемент |
Группирование
С помощью круглых скобок операторы коллекции можно группировать для ясности, либо в случае, если для выражения операции не подходит обычный приоритет. Операторы группировки можно использовать в любых выражениях фильтра (предикатах), например author[(degree or award)and publication]
. Их также можно использовать в выражениях шага высшего уровня, например (book|magazine)
или (author/degree | book/award)
. Их нельзя применять к выражениям шага более низкого уровня. Например, выражение author/(degree | award)
недопустимо.
Примеры
Выражение | Ссылается на |
---|---|
|
Все элементы |
|
Все элементы |