Penso di avere più o meno lo stesso problema di te. Avevo un modello "esterno" e volevo chiamare un diverso modello "interno" a seconda di alcune variabili impostate in fase di esecuzione. Ho trovato la tua domanda su Google per un modo per avere una dinamica <xsl:call-template>
. L'ho risolto usando <xsl:apply-templates>
invece, come segue.
L'XML di input (generato a run-time) contiene qualcosa sulla falsariga di:
<template name="template_name_1"/>
Il XSL nel modello "esterno" ha:
<xsl:apply-templates select="template"/>
(Il select="template"
in questo apply-templates si riferisce al tag <template>
nell'XML di input)
E infine "interno" modello, che ho voluto inserire come conseguenza del valore dell'attributo name
nel mio XML, si presenta come:
<xsl:template match="template[@name='template_name_1']">
<!-- XSL/XHTML goes here -->
</xsl:template>
(Anche in questo caso, il match="template[@name='xyz']"
si riferisce alla precedente select="template"
e, a sua volta al tag <template>
e il suo attributo name
nell'input XML)
In questo modo posso avere un template "chiamato" dinamicamente semplicemente controllato dal mio input XML.
Questo potrebbe non essere lo stesso problema che stai cercando di risolvere, ma penso che sia abbastanza vicino, e molto più semplice delle soluzioni FSXL menzionate altrove in questa pagina.
Ah, ma c'è un brutto trucco per aggirare questo problema - vedi la mia risposta. –
@Tomalak Questo è stato possibile (anche se in una diversa forma sintattica) per quasi 8 anni :) Vedi la mia risposta per i dettagli. –