He oído que la mayoría de las veces es posible (y mejor) usar plantillas de aplicar en lugar de para cada una al escribir un XSLT. ¿Es esto cierto? Si es así, ¿cuáles son los beneficios de usar apply-templates?Cuándo usar for-each y cuándo usar apply-templates en xslt?
Respuesta
El uso de <xsl:for-each>
no es perjudicial en absoluto 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>
en XSLT 1.0 es cambiar el documento actual; esto a menudo es necesario para poder utilizar la función key()
en un documento, diferente del documento XML de origen actual, por ejemplo, de manera eficiente access lookup-table que reside en su propio documento xml.
Por otro lado, usar <xsl:template>
y <xsl:apply-templates>
es mucho más potente y elegante.
Estas son algunas de las diferencias más importantes entre los dos enfoques:
xsl:apply-templates
es mucho más rica y más profunda quexsl:for-each
, incluso simplemente porque no sabemos lo que el código será aplicado en los nodos de la selección - en el caso general, este código será diferente para diferentes nodos de la lista de nodos.El código que se aplicará manera se pueden escribirse después de los
xsl:apply template
s fue escrito por y personas que no conocen el autor original.
implementación de funciones de orden superior (HOF) en XSLT El FXSL library 's no sería posible si XSLT no tenía la instrucción <xsl:apply-templates>
.
Resumen: Las plantillas y la instrucción <xsl:apply-templates>
es cómo XSLT implementa y se ocupa de polimorfismo.
Referencia: Ver toda esta discusión: http://www.stylusstudio.com/xsllist/200411/post60540.html
- 1. Cuándo usar categorías y cuándo usar subclases?
- 2. Cuándo usar undef_method, y cuándo usar remove_method?
- 3. cuándo usar Tarea y cuándo usar Subproceso?
- 4. Cuándo usar Pepino y cuándo usar RSpec?
- 5. ¿Cuándo usar == y cuándo usarlo?
- 6. IEnumerable, IEnumerator vs foreach, cuándo usar lo
- 7. Cuándo usar componentes y cuándo usar extensiones en Yii?
- 8. Cuándo usar vectores y cuándo usar matrices en C++?
- 9. Cuándo usar dup, y cuándo usar clon en Ruby?
- 10. Cuándo usar Ruby vs Cuándo usar PHP
- 11. Cuándo usar Restringir y cuándo no a
- 12. Cuándo usar .mdf y cuándo .sdf?
- 13. Cuándo usar OSGi EventAdmin y cuándo no?
- 14. Cuándo usar `zipmap` y cuándo` map vector`?
- 15. Cuándo usar un módulo y cuándo usar una clase
- 16. ¿Cuándo debe usar JCR y cuándo debe usar JPA/RDBMS?
- 17. Cuándo usar Requirejs y cuándo usar javascript incluido?
- 18. Cuándo usar assert() y cuándo usar try catch?
- 19. Cuándo usar y cuándo no usar Try Catch Finally
- 20. Cuándo usar el sistema() y cuándo usar execv *()?
- 21. ¿Cuándo debería usar TCP_NODELAY y cuándo TCP_CORK?
- 22. cuándo deberíamos usar instanceof y cuándo no
- 23. ¿Cuándo debería usar Silverlight y cuándo XNA?
- 24. Cuándo usar GWT y cuándo no
- 25. Cuándo usar Class.isInstance() y cuándo usar el operador instanceof?
- 26. ¿Cuándo debería usar require() y cuándo usar define()?
- 27. Cuándo deberíamos usar mutex y cuándo deberíamos usar el semáforo
- 28. Cuándo usar, no usar, OneToOne y ManyToOne
- 29. Cuándo usar atributos vs. cuándo usar propiedades en python?
- 30. ¿Cuándo usar PreRender en PageLoad?
Buena pregunta, esto va con el "corazón" de XSLT. +1. –