diferencia esencial entre <xsl:apply-templates>
y <xsl:-for-each>
que nadie ha señalado:
<xsl:apply-templates>
es realmente algo mucho más que un bonito equivalente, más elegante de <xsl:for-each>
:
xsl:apply-templates
es mucho más rico y más profundo que xsl:for-each
, incluso simplemente porque no sabemos qué código se aplicará en los nodos de la selección - en el caso general este código será diferente para nodos diferentes de la lista de nodos.
Además, el código que se aplicará se puede escribir después de la forma en XSL: aplicar plantillas fue escrito y por la gente que no conoce el autor original.
_2. Por otro lado, usando <xsl:for-each>
no es de ninguna manera perjudicial si se sabe exactamente cómo se procesa <xsl:for-each>
.
El problema es que muchos de los recién llegados a XSLT que tienen experiencia en programación imperativa toman <xsl:for-each>
como sustituto de un "bucle" en su PL favorito y piensan que les permite realizar lo imposible, como incrementar un contador o cualquier otra modificación de un <xsl:variable>
ya definido.
Un uso indispensable de <xsl:for-each>
es cambiar el documento actual; esto a menudo es necesario in order to be able to use the key() function on a document, different from the current source XML document, por ejemplo para acceder de manera eficiente a la tabla de búsqueda que reside en su propio documento xml.
No hay nada "imperativo" en. Además, ¿qué quiere decir con "use-template"? No hay tal instrucción en XSLT. –
s/use-template/call-template /: Typo – Richard
bucle (o cualquier tipo) es en gran parte el reino de la programación imperativa. Funcionalmente uno usaría la recursión. – Richard