Операции с наборами
Язык XPath поддерживает операцию задания |
.
Union (|), оператор
Оператор |
, или union, возвращает объединение двух своих операндов, которые должны быть наборами узлов. Например, //author | //publisher
возвращает набор узлов, в котором объединены все узлы //author
и все узлы //publisher
. Для объединения нескольких наборов узлов можно связать несколько операторов union по цепочке друг с другом. Например, //author | //publisher | //editor | //book-seller
возвращает набор узлов, содержащий все узлы //author
, //publisher
, //editor
и //book-seller elements
. Оператор union сохраняет порядок расположения документов и не возвращает повторяющиеся документы.
Примеры
Выражение | Ссылается на |
---|---|
|
Набор узлов, содержащий элементы |
|
Набор узлов, содержащий элементы |
|
Набор узлов, содержащий все элементы |
|
Набор узлов, содержащий все элементы |
Пример
В следующем примере иллюстрируется действие оператора union.
XML-файл (test.xml)
XSLT-файл (test.xsl)
Приведенная ниже таблица стилей XSLT выбирает все элементы <x>
, атрибут a
которых равен 2
, а также элементы <x>
без атрибутов.
Результат выполнения данного преобразования:
Очередность
В следующей таблице показан порядок приоритета (от наибольшего к наименьшему) между логическими операторами и операторами сравнения.
Очередность | Операторы | Описание |
---|---|---|
1 |
|
Группирование |
2 |
|
Фильтры |
3 |
|
Операции с путями |
4 |
|
Сравнения |
5 |
|
Сравнения |
6 |
|
Объединение |
7 |
|
Логическое НЕТ |
8 |
|
Логическое И |
9 |
|
Логическое ИЛИ |
Пример
В следующем примере иллюстрируется действие приведенного выше приоритета операторов.
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>
, перечисленные далее вместе с их дочерними элементами.