xsl:iterate¶
Используется для итерации последовательности с возможностью задания параметров для использования в следующей итерации.
Доступен в XSLT 3.0. Начиная с Saxon 9.8, доступен во всех редакциях. Реализован в Saxon-PE и Saxon-EE начиная с Saxon 9.6.
- Категория: инструкция
- Содержимое: (
xsl:param
* ,xsl:on-completion
? , sequence-constructor ) - Допустимые родительские элементы: любой элемент XSLT, модель содержимого которого - sequence-constructor; любой литеральный элемент результата
Атрибуты¶
select
- expression
- Входная последовательность, над которой обрабатывается итерация.
Заметки по реализации Saxon¶
Порядок элементов в xsl:iterate
изменился со времен первоначального рабочего проекта W3C (xsl:on-completion
теперь идет сразу после xsl:param
). Начиная с версии Saxon 9.7, разрешено только новое упорядочивание. В Saxon 9.6 допускается как новое, так и старое упорядочивание, но при использовании старого упорядочивания выдается предупреждение.
В более ранних версиях Saxon прототип xsl:iterate
был реализован как расширение в пространстве имен Saxon (saxon:iterate
). В Saxon 9.5 это расширение было упразднено.
Чтобы xsl:iterate
был потоковым, правила W3C требуют, чтобы выражение select
было "striding", что означает, что оно может использовать дочернюю ось, но не ось потомков (чтобы выбранные узлы не перекрывали друг друга). До версии Saxon 9.5 Saxon пытался быть более либеральным и разрешить ограниченный поток также при использовании оси потомка. Начиная с версии Saxon 9.6, Saxon был приведен в соответствие со спецификацией W3C. Во многих случаях ограничение можно обойти, используя функцию outermost, например, выражение outermost(//title)
является striding, несмотря на то, что в нем используется ось descendant.
Подробности¶
Инструкция xsl:iterate
является новой в XSLT 3.0. Она похожа на xsl:for-each
, за исключением того, что элементы входной последовательности обрабатываются последовательно, и после обработки каждого элемента входной последовательности можно задать параметры для использования в следующей итерации. Поэтому его можно использовать для решения проблем, для которых в XSLT 2.0 требовались рекурсивные функции или шаблоны.
Инструкция xsl:iterate
мотивирована случаями использования для потоковой обработки, но она также может быть выгодно использована в ситуациях, не связанных с потоковой обработкой. Для получения дополнительной информации смотрите Потоковая передача с xsl:iterate
.
Инструкция допускает дочерний элемент xsl:on-completion
, который определяет обработку, выполняемую при исчерпании входной последовательности. Инструкции внутри xsl:on-completion
имеют доступ к конечным значениям параметров, объявленных в наборе инструкций xsl:next-iteration
при обработке последнего элемента в последовательности. Элемент xsl:break
может быть использован внутри вложенного конструктора последовательности инструкции xsl:iterate
, что вызывает преждевременное завершение до обработки всей входной последовательности.
Примеры¶
Пример 1¶
Вычисляет текущий баланс последовательности финансовых операций:
1 2 3 4 5 6 7 8 9 |
|
Пример 2¶
Копирует входную последовательность до первого элемента <br>
:
1 2 3 4 5 6 7 8 9 10 |
|