xsl online generate generador from example create convertir xslt

online - xslt generator



XSLT Pasa el contexto actual en la plantilla de llamada (2)

Sería bueno (sería, ¿no?) Si una plantilla sin xsl:param y llamada por una call-template vacía simplemente recoja el nodo de contexto de la persona que llama.

Así es exactamente cómo se define xsl:call-template en la especificación W3C XSLT 1.0 (y 2.0), e implementado por cualquier procesador XSLT compatible .

Aquí hay un pequeño ejemplo:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text"/> <xsl:template match="a"> <xsl:call-template name="currentName"/> </xsl:template> <xsl:template name="currentName"> Name: <xsl:value-of select="name(.)"/> </xsl:template> </xsl:stylesheet>

Cuando esta transformación se aplica en el siguiente documento XML :

<t> <a/> </t>

Se produce el resultado deseado, correcto :

Name: a

En XSLT 1.0, ¿cuál es la forma más corta / limpia / recomendada de pasar el nodo de contexto actual a una plantilla llamada y que ese nodo se convierta en el nodo de contexto dentro de la plantilla llamada?

Sería bueno (sería, ¿no?) Si una plantilla sin xsl: param y llamada por una plantilla de llamada vacía simplemente tomara el nodo de contexto de la persona que llama, pero lo mejor que puedo pensar es esto:

<xsl:call-template name="sub"> <xsl:with-param name="context" select="." /> </xsl:call-template>

con

<xsl:template name="sub"> <xsl:param name="context" /> <xsl:for-each select="$context"> </xsl:for-each> </xsl:template>


Solo otra manera de explicar lo que dijo Dimitre.

Cuando llama a una plantilla desde un nodo, ya está allí en ese nodo,

ejemplo:

asume este código:

<xsl:template match="MyElement"> <xsl:call-template name="XYZ"/> </xsl:template> <xsl:template name="XYZ> <xsl:value-of select="."/> </xsl>

El código anterior es tan bueno como escribir:

<xsl:template match="MyElement"> <xsl:value-of select="."/> </xsl:template>

También puede utilizar para cada bucle en la plantilla llamada. :)

Pero solo asegúrate de dónde estás exactamente ..