Creo que tenía más o menos el mismo problema que tú. Tenía una plantilla "externa" y quería llamar a una plantilla "interna" diferente dependiendo de alguna variable configurada en tiempo de ejecución. Encontré tu pregunta buscando en Google una forma de tener un <xsl:call-template>
dinámico. Lo resolví utilizando <xsl:apply-templates>
en su lugar, de la siguiente manera.
El XML de entrada (generado en tiempo de ejecución) contiene algo a lo largo de las líneas de:
<template name="template_name_1"/>
El XSL en la plantilla "exterior" tiene:
<xsl:apply-templates select="template"/>
(El select="template"
en this apply-templates hace referencia a la etiqueta <template>
en el XML de entrada)
Y finalmente, el "interior" plantilla, que quería incluir como resultado del valor del atributo name
en mi XML, se ve así:
<xsl:template match="template[@name='template_name_1']">
<!-- XSL/XHTML goes here -->
</xsl:template>
(Una vez más, la match="template[@name='xyz']"
se refiere a la anterior select="template"
ya su vez a la etiqueta <template>
y su atributo name
en el XML de entrada)
De esta manera puedo tener una plantilla dinámicamente "llamada" simplemente controlada desde mi XML de entrada.
esto podría no ser el mismo problema que se está tratando de resolver, pero creo que es bastante estrecha, y mucho más simple que las soluciones FSXL mencionados en otra parte de esta página.
Ah, pero hay un hack feo para evitar esto - ver mi respuesta. –
@Tomalak Esto ha sido posible (aunque en una forma sintáctica diferente) durante casi 8 años :) Consulte mi respuesta para más detalles. –