xsl-list
[Top] [All Lists]

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

2008-01-23 01:53:42
Batis DAVE wrote:
I want to return a value from a template(getIdList). The returned
value is saved in a variable ($idList) and is a string wich is the
concatenation  of my nodes id : id1,id2,id3,...
I use this code wich is not working... i got nothing when i display
the variable value...!!

Here's my code:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 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/vid" name="getIdList" />
               </xsl:variable>
               <xsl:value-of select="$idList"/>
       </xsl:template>

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

</xsl:stylesheet>

What's wrong in it? is there another simple way to get what i want?

--~------------------------------------------------------------------
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>
--~--


Hi Dave,

for the first, you cannot pass parameters to a template with select and match. The other problem is the scope of the variable 'var'. It only lives within the scope of the for-each. So if you try to get a value from it outside the foreach it is empty (it is not defined)

See the stylesheet below for a newbie-solution. It uses recursion.

regards, Ruud

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 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 name="getIdList">
      <xsl:with-param name='list' select="/root/vid"/>
    </xsl:call-template>
  </xsl:variable>
  <xsl:value-of select="$idList"/>
</xsl:template>

<xsl:template name="getIdList">
  <xsl:param name='list'/>

    <xsl:if test="count($list) > 0">
      <xsl:value-of select='$list[1]'/>
      <xsl:text>,</xsl:text>
      <xsl:call-template name="getIdList" >
<xsl:with-param name='list' select="$list[1]/following-sibling::*"/>
      </xsl:call-template>
    </xsl:if>
</xsl:template>

</xsl:stylesheet>


--~------------------------------------------------------------------
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>
--~--

<Prev in Thread] Current Thread [Next in Thread>