[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: call-template question

Subject: RE: call-template question
From: "Carl Soane" <csoane@xxxxxxxxxxxxx>
Date: Wed, 16 Feb 2000 15:23:38 -0800
xsl call template name
>> Is it possible to call a template and pass in as a parameter the name of
the template you would like the called template to call?

Here's a previously posted answer to an almost identical question:

<previous_answer>
Can't be done with call-template, except by an xsl:choose instruction that
lists all the possibilities.

You could achieve the effect with apply-templates with a bit of deviousness.

Change your named template from
<xsl:template name="xyz">
to
<xsl:template name="xyz" match="xsl:template[@name='xyz']"/>

and call it like this:
<xsl:variable name="tname" select="'xyz'"/>
<xsl:apply-templates select="document('')/*/xsl:template[@name=$tname]"/>

However, this will change the current node and node list; if the named
template needs these, they'll have to be passed as parameters.

I suspect if you go back to the original problem, there is a better solution
than this.

Mike Kay

</previous_answer>

so, in your case, the  xsl would look like this:

<xsl:template match="/">
<HTML>
<xsl:call-template name="buildpage">
  <xsl:with-param name="nexttemplate">buildbody</xsl:with-param>
</xsl:call-template>
</HTML>
</xsl:template>

<xsl:template name="buildpage">
<xsl:param name="nexttemplate">defaulttemplate</xsl:param>
 <xsl:value-of select="$nexttemplate"/>
 <xsl:apply-templates
select="document('')/*/xsl:template[@name=$nexttemplate]"/>
</xsl:template>

<xsl:template name="buildbody" match="xsl:template[@name='buildbody']">
<BODY>
</BODY>
</xsl:template>


-----Original Message-----
From:	owner-xsl-list@xxxxxxxxxxxxxxxx [SMTP:owner-xsl-list@xxxxxxxxxxxxxxxx]
On Behalf Of Joni Fazo
Sent:	Wednesday, February 16, 2000 11:37 AM
To:	'XSL-List-Digest@xxxxxxxxxxxxxxxx'
Subject:	xsl:call-template question

Hello,


Here's a (non-working) example of what I am trying to do:

<!-- / Template -->

<xsl:template match="/">
<HTML>
<xsl:call-template name="buildpage">
??????? <xsl:with-param name="nexttemplate">buildbody</xsl:with-param>
</xsl:call-template>
</HTML>
</xsl:template>

<!-- buildpage Template -->

<xsl:template name="buildpage">
??????? <xsl:param name="nexttemplate">defaulttemplate</xsl:param>
??????? <xsl:value-of select="$nexttemplate"/>
??????? <xsl:call-template name="{$nexttemplate}"/>
</xsl:template>

<!-- buildbody Template -->

<xsl:template name="buildbody">
<BODY>?
</BODY>
</xsl:template>

I get the error "No named template "{$nexttemplate}" found" when the line
<xsl:call-template name="{$nexttemplate}"/>
is processed.? I am able to get the value of $nexttemplate though...

Thanks in advance for any help you can give me.

Joni


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.