xsl:sequence¶
Используется для построения произвольных последовательностей. Он может выбирать любую последовательность узлов и/или атомарных значений и, по сути, добавляет их к результирующей последовательности.
Доступен в XSLT 2.0 и более поздних версиях. Доступен во всех изданиях Saxon.
- Категория: инструкция
- Содержимое: sequence-constructor
- Допустимые родительские элементы: любой элемент XSLT, модель содержимого которого - sequence-constructor; любой литеральный элемент результата
Атрибуты¶
select?
- expression
- Определяет вход. Обязательный атрибут в XSLT 2.0, но в XSLT 3.0 (и реализованном начиная с Saxon 9.5) вход может быть указан либо атрибутом
select
, либо вложенным конструктором последовательности.
Подробности¶
Элемент xsl:sequence
может использоваться для создания любой последовательности узлов и/или атомарных значений. Они включаются в последовательность результатов напрямую. В отличие от xsl:copy-of
, копирование не производится.
Наиболее распространенное использование - возврат результата из функции (см. пример 1).
Есть еще два интересных сценария использования. Первый - это копирование атомарных значений в дерево (см. пример 2). Второй, более важный, - построение переменной с порядковым значением (см. пример 3). Переменная является последовательно-оценочной, если элемент привязки переменной (например, xsl:variable
) имеет непустое содержимое, атрибут as и не имеет атрибута select
.
Если узлы строятся внутри переменной с порядковым значением, они будут без родителей. Пример переменной с последовательным значением, содержащей узлы без родителей, приведен в примере 4.
Примеры¶
Пример 1¶
Возвращение результата из функции:
1 2 3 4 |
|
Пример 2¶
Копирование атомарных значений в дерево:
1 2 3 4 5 |
|
Это приводит к выводу <e>1 2 3 4 5<br/>6 7 8 9 10</e>
.
Пример 3¶
Конструирование переменной с последовательным значением:
1 2 3 4 5 |
|
В качестве значения переменной получается последовательность (1, 4, 9, 16, 25
).
Пример 4¶
Создание переменной, значением которой является последовательность из трех атрибутов без родителей:
1 2 3 4 5 |
|
Вполне законно иметь два атрибута в последовательности с одинаковыми именами; конфликта не возникает до тех пор, пока не будет сделана попытка добавить их оба в один и тот же элемент. Атрибуты могут быть добавлены в элемент с помощью <xsl:copy-of select="$seq"/>
в инструкции xsl:element
или в буквальном элементе результата. На этом этапе действует обычное правило: если атрибуты дублируются, побеждает последний.