xsl-list
[Top] [All Lists]

RE: [xsl] passing a variable to call-template

2006-08-11 06:03:59
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) &gt; 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(_dot_)j(_dot_)welch(_at_)gmail(_dot_)com] 
Sent: Friday, August 11, 2006 7:54 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] passing a variable to call-template

On 8/11/06, David White <davidw(_at_)kencook(_dot_)com> 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

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--