Subject: RE: passing a variable to call-template
From: "David White" <davidw@xxxxxxxxxxx>
Date: Fri, 11 Aug 2006 08:03:12 -0500
|
Thanks to everyone for the quick replies!
Ya, after looking over the FXSL materials my head is spinning.
I'm going to stick with the simple choose statement you mention below.
I have XML which looks like this:
<warning conformance="alert_hand_in_gears">
<title/>
<para/>
</warning>
And XSLT:
<xsl:variable name="this.warning">
<xsl:choose>
<xsl:when test="string-length($list) = 0">
<!-- We are done -->
</xsl:when>
<xsl:when test="contains($list, ' ')">
<xsl:value-of select="substring-before($list, ' ')"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$list"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:if test="string-length($this.warning) > 0">
<xsl:choose>
<xsl:when test="$this.warning = 'alert_hand_in_gears'"><xsl:call-template
name="alert_hand_in_gears"/></xsl:when>
<xsl:otherwise><fo:inline color="red" font-size="6pt" width="38pt"
font-weight="bold">ART NOT FOUND <xsl:value-of
select="$this.warning"/></fo:inline></xsl:otherwise>
</xsl:choose>
So, I'm hoping to be able to dynamically pull templates based upon the
conformance attribute in the XML. This.warning is a template that contains
only an SVG. It would be nice to do this dynamically from the XML but looks
like its just easier to hard code the values.
David White
-----Original Message-----
From: andrew welch [mailto:andrew.j.welch@xxxxxxxxx]
Sent: Friday, August 11, 2006 7:54 AM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: passing a variable to call-template
On 8/11/06, David White <davidw@xxxxxxxxxxx> wrote:
> Is this possible?
>
> <xsl:call-template name="{$this.warning}"/>
>
> I would like to pass a variable into call-template but haven't had any
luck.
No this isn't possible as the name attribute must contain a qname,
which means it must be known at compile time... the usual way is:
<xsl:choose>
<xsl:when test="$this.warning = 'red'">
<xsl:call-template name="red"/>
</xsl:when>
<xsl:when test="$this.warning = 'green'>
<xsl:call-template name="green"/>
etc... although it's highly likely you can achieve what you are trying
to do another way, maybe post some examples showing your requirements
and see if there's a better solution...
cheers
andrew
|