Операции с наборами

Язык XPath поддерживает операцию задания |.

Union (|), оператор

Оператор |, или union, возвращает объединение двух своих операндов, которые должны быть наборами узлов. Например, //author | //publisher возвращает набор узлов, в котором объединены все узлы //author и все узлы //publisher. Для объединения нескольких наборов узлов можно связать несколько операторов union по цепочке друг с другом. Например, //author | //publisher | //editor | //book-seller возвращает набор узлов, содержащий все узлы //author, //publisher, //editor и //book-seller elements. Оператор union сохраняет порядок расположения документов и не возвращает повторяющиеся документы.

Примеры

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

first-name | last-name

Набор узлов, содержащий элементы <first-name> и <last-name> в текущем контексте.

(bookstore/book | bookstore/magazine)

Набор узлов, содержащий элементы <book> или <magazine> внутри элемента <bookstore>.

book | book/author

Набор узлов, содержащий все элементы <book> и все элементы <author> внутри элементов <book>.

(book | magazine)/price

Набор узлов, содержащий все элементы <price> элементов <book> или <magazine>.

Пример

В следующем примере иллюстрируется действие оператора union.

XML-файл (test.xml)

XSLT-файл (test.xsl)

Приведенная ниже таблица стилей XSLT выбирает все элементы <x>, атрибут a которых равен 2, а также элементы <x> без атрибутов.

Результат выполнения данного преобразования:

Очередность

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

Очередность Операторы Описание

1

( )

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

2

[ ]

Фильтры

3

/

//

Операции с путями

4

&lt;

&lt;=

&gt;

&gt;=

Сравнения

5

=

!=

Сравнения

6

|

Объединение

7

not()

Логическое НЕТ

8

and

Логическое И

9

or

Логическое ИЛИ

Пример

В следующем примере иллюстрируется действие приведенного выше приоритета операторов.

XML-файл (test.xml)

Базовый XSLT-файл (test.xsl)

Этот базовый XSLT-файл будет использоваться в следующих примерах в качестве отправной точки.

Вариант 0. Тестовый запуск

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

В результате будет сформирован документ XML, идентичный исходному, но без команды обработки <?xml version="1.0"?>.

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

Вариант 1: () связывает плотнее, чем []

Следующее правило шаблона выбирает первый элемент <y> в порядке документа из всех элементов <y> в исходном документе.

Далее приведен результат.

<y>y31</y>

Вариант 2: [] связывает плотнее, чем / или //

Следующее правило шаблона выбирает все элементы <y>, которые являются первыми среди своих одноуровневых элементов.

Далее приведен результат.

<y>y31</y>

<y>y21</y>

<y>y11</y>

<y>y03</y>

Вариант 3: and, not

Следующее правило шаблона выбирает все элементы <x>, у которых нет дочерних элементов <x>, есть родительский элемент <x> и нет ни одного атрибута.

В результате получается один элемент <x>, приведенный ниже вместе с дочерними элементами:

<x>
   <y>y31</y>
   <y>y32</y>
</x>

Вариант 4: or, and, not

Следующее правило шаблона выбирает каждый элемент <x>, который является дочерним элементом элемента <x>, или не является родительским элементом элемента <x> и не имеет атрибутов.

В результате создается набор узлов, содержащих следующие элементы <x>, перечисленные далее вместе с их дочерними элементами.

Вариант 5: and, or, not

Следующее правило шаблона выбирает каждый элемент <x>, который является дочерним элементом элемента <x>, но не является родительским элементом элемента <x> или который не имеет атрибутов.

В результате создается набор узлов, содержащих следующие элементы <x>, перечисленные далее вместе с их дочерними элементами.