¿podría explicarme la diferencia entre <xsl:apply-template>
y <xsl:call-template>
y cuándo debería usar <xsl:call-template>
?
quediferencia entre <xsl: apply-template> y <xsl: call-template>?
Respuesta
las gracias en un nivel muy básico, se utiliza <xsl:apply-templates>
cuando se quiere dejar que los nodos de la manija procesador automáticamente y utiliza <xsl:call-template/>
cuando se desea un mayor control sobre el proceso. Así que si usted tiene:
<foo>
<boo>World</boo>
<bar>Hello</bar>
</foo>
Y que tiene la siguiente XSLT:
<xsl:template match="foo">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="bar">
<xsl:value-of select="."/>
</xsl:template>
<xsl:template match="boo">
<xsl:value-of select="."/>
</xsl:template>
Usted recibirá el resultado WorldHello
. Esencialmente, ha dicho "manejar barra y abucheo de esta manera" y luego ha dejado que el procesador XSLT maneje estos nodos a medida que los atraviesa. En la mayoría de los casos, así es como debe hacer las cosas en XSLT.
A veces, sin embargo, quieres hacer algo más elegante. En ese caso, puede crear una plantilla especial que no coincida con ningún nodo en particular. Por ejemplo:
<xsl:template name="print-hello-world">
<xsl:value-of select="concat(bar, ' ' , boo)" />
</xsl:template>
Y a continuación, puede llamar a esta plantilla mientras se está procesando <foo>
en lugar de procesar automáticamente foo
's nodos hijos:
<xsl:template match="foo">
<xsl:call-template name="print-hello-world"/>
</xsl:template>
En este ejemplo particular, artificial, que ahora recibe " Hello World "porque ha anulado el procesamiento predeterminado para hacer lo suyo.
Espero que ayude.
¿Me podría explicar la diferencia entre
<xsl:apply-template>
y<xsl:call-template>
y cuando debo usar<xsl:call-template>
?
Uno puede uso <xsl:call-template>
pero casi nunca se debe.
Está en el espíritu de XSLT para permitir que el procesador XSLT para determinar exactamente qué plantilla mejores partidos un nodo y para decidir utilizar esta plantilla para el procesamiento de ese nodo. Esto nos proporciona extensibilidad y polimorfismo limpios, fáciles y potentes.
En general, la comparación de xsl:apply-templates
a xsl:call-template
es similar a la comparación de la invocación de un método virtual de una clase base con la invocación directa de un método no virtual.
Estas son algunas diferencias importantes:
xsl:apply-templates
es mucho más rica y más profunda quexsl:call-templates
e incluso dexsl:for-each
, simplemente porque no sabemos qué código se aplicará en los nodos de selección - en el caso general este código será diferente para nodos diferentes de la lista de nodos.El código que se aplicará manera se pueden escribirse después de la
xsl:apply-templates
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. Uno puede y debe evitar el uso de xsl:call-template
, que no permite el polimorfismo y limita la reutilización y la flexibilidad.
Referencia: Ver toda esta discusión: http://www.stylusstudio.com/xsllist/200411/post60540.html
- 1. diferencia entre xsl: param y xsl: variable
- 2. <xsl: apply-templates select = "./*" /> y <xsl: apply-templates />
- 3. <xsl: variable> Imprime el valor de la variable XSL usando <xsl: value-of>
- 4. ¿Cómo cambiar <xsl: variable> valor
- 5. pruebas XSL cadenas vacías con <xsl:if> y clasificar
- 6. diferencia entre <%! %> y <% %>
- 7. Diferencia entre <? Php y <?
- 8. XSL xsl: template match = "/"
- 9. XSL
- 10. inserte la etiqueta <? Xml-stylesheet con xsl
- 11. Asignar a <xsl: variable> después de ladecoración
- 12. Usar variables en <xsl: sort select = "" />
- 13. Incrustar código XSL dentro de una etiqueta <a>
- 14. XSL: pasar variables entre plantillas
- 15. XSL llamada recursiva - xsl: funciones vs xsl: plantilla con plantilla de llamada
- 16. ¿Cuál es la diferencia entre ofstream "<<" y Write
- 17. ¿Diferencia entre <asp:table> y <table>?
- 18. Diferencia entre <string> y <string.h>?
- 19. ¿Cuál es la diferencia entre <% %> y <%=%>?
- 20. ¿Cuál es la diferencia entre <%# %> y <%= %>?
- 21. En ASP.Net, ¿cuál es la diferencia entre <% = y <% #
- 22. Ruby - Diferencia entre Array # << y Array # push
- 23. Diferencia entre <acronym> y <abbr>?
- 24. Uso de los parámetros XSLT; <xsl:param> & <xsl: with-param>
- 25. diferencias entre for-each y plantillas en xsl?
- 26. ¿Diferencia entre <=> y == en Ruby?
- 27. Diferencia entre clase y clase <?>
- 28. transformación xsl
- 29. ¿Cuál es la diferencia entre <%: y <% = y <% # en aspx?
- 30. LXML y documento XSL() Función
Hasta el momento esta es la mejor explicación que he leído nunca en XSLT (aunque tengo que añadir que XSLT es lo mío, y posiblemente nunca más. estarán) –