Saltar al contenido principal

call-template

El elemento call-template permite invocar a un template definido previamente. El funcionamiento de call-template es similar a la de una función de un lenguaje de programación tradicional.

La estructura de este elemento es la siguiente:

<xsl:call-template name="nombre-template"/>

Donde:

  • name es el nombre de una plantilla definida en la hoja XSL.

Cuando se utiliza call-template es necesario que exista un template que tenga un atributo name que coincida con el valor del atributo name de call-template.

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:call-template name="nombre-plantilla"/>
</xsl:template>
<xsl:template name="nombre-plantilla">
Contenido
</xsl:template>
</xsl:stylesheet>

En cualquier caso, un template definido con un atributo name no será utilizada hasta que se utilice un call-template.

En el siguiente ejemplo, a pesar de realizar la definición de la plantilla nombre-plantilla, no se hace uso de ella y, por lo tanto, la transformación XSLT no devolvería nada:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
</xsl:template>
<xsl:template name="nombre-plantilla">
Contenido
</xsl:template>
</xsl:stylesheet>

El elemento call-template elemento puede contener el elemento with-param:

<xsl:call-template name="nombre-template">
<xsl:with-param>
</xsl:call-template>

Un ejemplo de uso de call-template sería el siguiente:

hoja.xsl
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<xsl:call-template name="parrafo"/>
<xsl:call-template name="parrafo"/>
</body>
</html>
</xsl:template>
<xsl:template name="parrafo">
<p>Párrafo</p>
</xsl:template>
</xsl:stylesheet>

Como podemos observar, tenemos un template definido con nombre parrafo. Después, dentro de otro template, se realizan dos invocaciones a parrafo. Cada invocación hace que se se substituya el elemento call-template por el el contenido del template al cual se invoca. En este caso, en las dos ocasiones se invoca a parrafo.

Consideremos que tenemos el siguiente documento XML:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="hoja.xsl"?>
<catalogo></catalogo>

En ese caso, la transformación XSLT daría como resultado un documento HTML:

<!DOCTYPE html>
<html>
<body>
<p>Párrafo</p>
<p>Párrafo</p>
</body>
</html>

El documento HTML se visualizaría de la siguiente manera:

Probar en el navegador