Subject:How to return values from sub-templates ? Author:Matt Adams Date:01 Dec 2004 05:32 AM
Sorry for this newbie question but I didn't found a hint in tutorials on how to return
back parameter values from sub-templates. Assume the following situation.
I want to pass back the boolean (or other values in other scenarios) value if the attribute "age"
exists in a node "myelement" with the attribute name="karl".
Yes, I know, THIS sample could be coded easier within
one template but my sample is only a simplified version for a complex scenario
where two templates are required.
Again, how can I access the value of the variable myval from the calling template?
Thank you
Matt
<xsl:template match="/">
<xsl:call-template name="subtemp">
<xsl:with-param name="parm" select="//myelement[@name = 'karl']" />
</xsl:call-template>
Age exists=<xsl:value-of select="$myval" /> <!-- does not work -->
</xsl:template>
Subject:How to return values from sub-templates ? Author:James Durning Date:02 Dec 2004 07:03 PM
Templates only pass back the value, not any variables. But, you can return nodes within the return value eg.
<xsl:template name="subtemp">
<xsl:param name="parm" />
Hello
<xsl:variable name="myval" select="exist(@age)" />
<xsl:value-of select="$myval"/>
</xsl:template>
However, this would combine Hello, with the other return value.
You could put the return value in a element eg.
<xsl:template name="subtemp">
<xsl:param name="parm" />
Hello
<xsl:variable name="myval" select="exist(@age)" />
<result><xsl:value-of select="$myval"/></result>
</xsl:template>
which would return
Hello<result>myvalue</result>
So you could change your main template to call the template from a variable...:
<xsl:template match="/">
<xsl:variable name="sub">
<xsl:call-template name="subtemp">
<xsl:with-param name="parm" select="//myelement[@name = 'karl']" />
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="$sub"/><!-- outputs 'Hello'/>
Age exists=<xsl:value-of select="$sub/result" /> </xsl:template>