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