Использование <xsl:for-each>
ни в коем случае не вредно, если точно знать, как обрабатывается <xsl:for-each>
.
Беда в том, что многие новички в XSLT, имеющие опыт в императивном программировании, принимают <xsl:for-each>
вместо «петли» в своем любимом PL и думают, что это позволяет им выполнять невозможное - например, увеличивать счетчик или любая другая модификация уже определенного <xsl:variable>
.
Одним обязательным использованием <xsl:for-each>
в XSLT 1.0 является изменение текущего документа - это часто необходимо для того, чтобы иметь возможность использовать функцию key()
в документе, отличном от текущего исходного XML-документа, для пример эффективного доступа к таблице поиска, которая находится в его собственном XML-документе.
С другой стороны, использование <xsl:template>
и <xsl:apply-templates>
гораздо мощнее и элегантнее.
Вот некоторые из наиболее важных различий между двумя подходами :
xsl:apply-templates
намного богаче и глубже, чем xsl:for-each
, даже
просто потому, что мы не знаем, какой код будет применяться на узлах
выбор - в общем случае этот код будет отличаться для
разные узлы списка узлов.
Код, который будет применяться
может быть написано так, как xsl:apply template
s было написано и
люди, которые не знают оригинального автора.
В библиотеке FXSL реализация функций высшего порядка (HOF) в XSLT была бы невозможна , если в XSLT не было инструкции <xsl:apply-templates>
.
Сводка : Шаблоны и инструкция <xsl:apply-templates>
- это то, как XSLT реализует и работает с полиморфизмом.
Ссылка : Просмотреть всю ветку: http://www.stylusstudio.com/xsllist/200411/post60540.html