xml editor

Supported platforms

Compatible with Windows7 & Mac OS X Snow Leopard

Ready for data server software
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

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


Subject: RE: [xsl] 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) &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.j.welch@xxxxxxxxx]
Sent: Friday, August 11, 2006 7:54 AM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] 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


Current Thread
Keywords
xml
XML Editor | XML Author | WYSIWYG Editors | Schema Editor | XSD Documentation | XSL/XSLT Editor | XQuery | XML Databases | SVN Client
© 2002-2011 SyncRO Soft Ltd. All rights reserved. | Sitemap | Privacy Policy | This website was created & generated with <oXygen/>®XML Editor