[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

RE: [xsl] dynamic template naming XSL1.0 and Saxon 6.5.5


Subject: RE: [xsl] dynamic template naming XSL1.0 and Saxon 6.5.5
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 19 Jun 2006 09:38:13 +0100

Saxon in fact has an extension element

saxon:call-template 

which is like xsl:call-template except that the "name" attribute is an AVT.
You don't need saxon:evaluate with this, just write

<saxon:call-template name="{$testVar/Configuration/Execute/@template}"/>

It's always better, of course, to work without extensions if you can. You
might like to look at Dimitre Novatchev's FXSL technique, which exploits the
ability of xsl:apply-templates to do dynamic dispatch. Rather than having a
variable holding the name of a template to be invoked, you have a variable
holding a node, typically a node with a unique name in some special
namespace; and then you do apply-templates on that node. By putting
different nodes in the variable, you can then cause different templates to
be invoked. 

Michael Kay
http://www.saxonica.com/


> -----Original Message-----
> From: news@xxxxxxxxxxx [mailto:news@xxxxxxxxxxx] 
> Sent: 19 June 2006 08:34
> To: 'xsl-list@xxxxxxxxxxxxxxxxxxxxxx'
> Subject: [xsl] dynamic template naming XSL1.0 and Saxon 6.5.5
> 
> Hello List,
> 
> I want to call templates dynamicly. With dynamicly I mean, 
> that the templates name is determined at runtime.
> I doing this with xPathes stored in variables and the 
> saxon:evaluate function allready, and it works pretty fine.
> For instance. I have a variable with an stored string that I 
> want to be the templates name that should be executed.
> <xsl:variable name="testVar">
>   <Configuration>
>     <Execute template="templateName"/>
>   </Configuration>
> </xsl:variable>
> 
> If I try
> <xsl:call-template
> name="{saxon:evaluate($testVar/Configuration/Execute/@template)}"/>
> 
> I want a template with the name of 'templateName' to be executed. 
> <xsl:template name="temlpateName">
> ...
> </xsl:template>
> 
> I ll get a error message saying that the name of the called 
> template must be a valid Qname. :(
> 
> Does anyboy know how I could solve my problem?
> 
> Thanks & with best regards,
> Jan


Current Thread