Существенная разница между <xsl:apply-templates>
и <xsl:-for-each>
, на которую никто не указал :
<xsl:apply-templates>
на самом деле нечто большее, чем более приятный, более элегантный эквивалент <xsl:for-each>
:
xsl:apply-templates
гораздо богаче и глубже, чем xsl:for-each
, даже
просто потому, что мы не знаем, какой код будет применяться на узлах
выбор - в общем случае этот код будет отличаться для
разные узлы списка узлов .
Также код, который будет применяться
может быть написано так, как шаблоны xsl: apply были написаны и
люди, которые не знают оригинального автора .
_2. С другой стороны, с использованием <xsl:for-each>
никоим образом не вредно, если точно знать, как обрабатывается <xsl:for-each>
.
Проблема в том, что многие новички в XSLT, имеющие опыт в императивном программировании, принимают <xsl:for-each>
вместо «цикла» в своем любимом PL и думают, что это позволяет им выполнять невозможное - например, увеличивать счетчик или любая другая модификация уже определенного <xsl:variable>
.
Одним из обязательных вариантов использования <xsl:for-each>
является изменение текущего документа - это часто требуется , чтобы иметь возможность использовать функцию key () в документе, отличном от текущего исходного XML документ , например, для эффективного доступа к справочной таблице, которая находится в его собственном XML-документе.