Re: [xsl] Return value from a template...

Subject: Re: [xsl] Return value from a template...
From: Martin Honnen <Martin.Honnen@xxxxxx>
Date: Tue, 08 Jan 2008 17:50:10 +0100
Batis DAVE wrote:
I want to return a variable value from a template based on this example:
but it's not working...
Here's my code:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl=""; version="1.0">
<xsl:output indent="yes" method="html" omit-xml-declaration="no"
encoding="ISO-8859-1" />
<xsl:param name="delimiter" select="','"/>

	<xsl:template match="/root">
		<xsl:variable name="idList">
			<xsl:call-template select="/root/bib" name="getIdList" />

An xsl:call-template does not allow a select attribute. If you define parameters on your template with xsl:param then you can pass parameters to the called template using xsl:with-param.

		<xsl:value-of select="$idList"/>

	<xsl:template match="/root/bib" name="getIdList">
		<xsl:for-each select="/root/bib">
			<xsl:variable name="var"  select="concat($var,ids, $delimiter)"/>
		<xsl:value-of select="$var"/>

The variable var is defined inside of the for-each but it is that way not available outside of it.



What's wrong in it?

See comments above. I am not sure what you want to achieve, if you want your named template to concatenate the ids values then you might want to do it as follows:
<xsl:template name="getIdList">
<xsl:param name="items"/>
<xsl:for-each select="$items/ids">
<xsl:value-of select="."/>
<xsl:if test="position() != last()">
<xsl:value-of select="$delimiter"/>

  <xsl:template match="/root">
    <xsl:call-template name="getIdList">
      <xsl:with-param name="items" select="bib"/>

The above is more or less guessing on how your XML input might look and what you want to achieve with your named template. If it does not help then you might want to post your XML input and tell us what you want to achieve.


	Martin Honnen

Current Thread