call-template name="{$pCall}" possible ?

F

FrankS

Hi All,
I have a problem with an call-template cmd at xslt 1.0:

With: pCall = 'ExInput'
------
I try to:

<xsl:call-template name="{$pCall}">
<xsl:with-param name="pVal" select="$pValue"/>
</xsl:call-template>
<!-- ============ -->
<!-- ============ -->
<xsl:template name="ExInput">
<xsl:param name="pVal" select="'0'"/>
<td style="background-color:#C0C0C0;"><xsl:call-template
name="XYZ"><xsl:with-param name="pVal"
select="."/></xsl:call-template></td>
</xsl:template>
<!-- ============ -->
-------
But it's not possible to call the Template with the param "{$pCall}" !!
I get the error: undefined template

It there no way to call - or it there an error in my code?
Many thanks for your help before!
BR
Frank
 
D

David Carlisle

call template is like a function call in most compiled languages, the
function (template) name has to be known at complie time.It can't be
constructed from an expression.

Often the answer is to pass in a node not a string then use
apply-templates not call-templates then the template that activates will
be the one that matches your node.

David
 
P

Philippe Poulard

FrankS said:
Hi All,
I have a problem with an call-template cmd at xslt 1.0:

With: pCall = 'ExInput'
------
I try to:

<xsl:call-template name="{$pCall}">
<xsl:with-param name="pVal" select="$pValue"/>
</xsl:call-template>
<!-- ============ -->
<!-- ============ -->
<xsl:template name="ExInput">
<xsl:param name="pVal" select="'0'"/>
<td style="background-color:#C0C0C0;"><xsl:call-template
name="XYZ"><xsl:with-param name="pVal"
select="."/></xsl:call-template></td>
</xsl:template>
<!-- ============ -->
-------
But it's not possible to call the Template with the param "{$pCall}" !!
I get the error: undefined template

It there no way to call - or it there an error in my code?
Many thanks for your help before!
BR
Frank

hi,

it is impossible to do it directly

however, there is a pattern for this, named "template tags":

first, you have to mark your template with a tag; the template must
match that tag:

<my:ExInput/>
<xsl:template match="my:ExInput">
<!-- your stuff here -->
</xsl:template>

<my:ExOutput/>
<xsl:template match="my:ExOutput">
<!-- your stuff here -->
</xsl:template>

to invoke it, use this:
<xsl:apply-templates select="document()/*/my:*[ local-name()=$pCall ]"/>

--
Cordialement,

///
(. .)
-----ooO--(_)--Ooo-----
| Philippe Poulard |
-----------------------
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,995
Messages
2,570,230
Members
46,819
Latest member
masterdaster

Latest Threads

Top