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:
<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: