2009-07-04 19 views
5

Si tengo una plantilla de la siguiente manera, que se utiliza para crear un botón:XSLT: Cómo volver a utilizar una plantilla dentro de otra plantilla

<xsl:template match="button" name="button"> 
    <a class="button" href="{@href}"> 
    <xsl:value-of select="@name"/> 
    </a> 
</xsl:template> 

Quiero ser capaz de utilizar ese botón en otra plantilla, como esto:

<xsl:template match="createForm"> 
    ... 
    <button name="Create" href="/create"/> 
</xsl:template> 

Sin embargo, esto solo mostrará la etiqueta del botón tal como está. Me gustaría que se procese a través de la plantilla de botón existente. ¿Cómo se puede lograr esto?

-

Gracias David M por su respuesta. Aquí es lo que tengo ahora para la plantilla de botones:

<xsl:template match="button" name="button"> 
    <xsl:param name="name" select="@name"/> 
    <xsl:param name="href" select="@href"/> 
    <a class="button" href="{$href}"> 
    <xsl:value-of select="$name"/> 
    </a> 
</xsl:template> 

La plantilla createForm ahora se ve así:

<xsl:template match="createForm"> 
    ... 
    <xsl:call-template name="button"> 
    <xsl:with-param name="name" select="'Create'"/> 
    </xsl:call-template> 
</xsl:template> 
+0

No estoy seguro sobre el título de este ... ¿Cuidar para explicar? – Noldorin

+0

Sí, no es realmente un título apropiado. No podía pensar en un título. ¿Sugerencia? – Joel

Respuesta

5

Intente utilizar esto (la parte superior de la cabeza):

<xsl:call-template name="button"> 
    <xsl:with-param name="name" value="Create" /> 
    <xsl:with-param name="href" value="/create" /> 
</xsl:call-template> 

También deberá declarar sus dos parámetros dentro de la plantilla de su botón usando <xsl:param ...>.

+0

tenga en cuenta que el valor predeterminado está relacionado con el nodo de contexto; no son literales de cadena. En el ejemplo dado, usaría value = "@ name" y value = "@ href" respectivamente. –

+0

@Marc - pero el "nodo de contexto" al que se refiere está dentro del XSLT, no el archivo que se está procesando ... este fue el enfoque incorrecto para llamar a una plantilla, ¿no? –

+0

yah .. podemos usar params .. es una respuesta correcta .. –

2

Como siempre y cuando utilice <xsl:include ... /> o <xsl:import ... />, usted debería ser capaz de utilizar cualquiera de:

<xsl:apply-templates select="button"/> <!-- or your own selector --> 

(que asume que hay elementos botón debajo del nodo de contexto)

o <xsl:call-template/> utilizando el nombre

Cuestiones relacionadas