Re: [xsl] What is wrong with this?

Subject: Re: [xsl] What is wrong with this?
From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx>
Date: Tue, 22 Jan 2002 22:28:39 +0000
Hi Khalid,

> can some one please let me know what is wrong with the code below.
>
> <xsl:template match = "distribution-transport-load">
>   <xsl:call-template name = "get-supply-total">
>     <xsl:with-param name = "supplyroot" select = "."/>
>   </xsl:call-template>
> </xsl:template>

Here, you pass the get-supply-total template a $supplyroot parameter
with a value of a node set containing a single node - the context node.
        
> <xsl:template name = "get-supply-total">
> <xsl:param name = "supplyroot"/>
> <xsl:choose>
> <xsl:when test = "$supplyroot">
> <xsl:variable name = "first" select= "$supplyroot[1]"/>
> <xsl:variable name = "remaining-total">
> <!-- for some reasons it can not gets in this block of code,there fore does
> not increment the total
> -->
>  <xsl:call-template name = "get-supply-total">
>    <xsl:with-param name = "supplyroot" select = "$supplyroot[position()!=1]"/>
>   </xsl:call-template>
> </xsl:variable>
> <xsl:value-of select = "$first/load-quantity + $remaining-total"/>
> </xsl:when>
>                         <xsl:otherwise>0</xsl:otherwise>
>                 </xsl:choose>
>         </xsl:template>


Whenever this template is called from the distribution-transport-load
template, the $supplyroot parameter is a node set containing a single
node. In the above recursive call, you pass a new value for the
$supplyroot parameter - the rest of the nodes in the $supplyroot node
set (after the first one). Since the $supplyroot parameter only ever
contains a single node, you pass an empty node set as the value of the
$supplyroot parameter, which means that this recursive call always
returns the value 0 (from the xsl:otherwise).

Your template would work just fine if the $supplyroot parameter were
passed a node set that contained more than one node. Unfortunately, I
can't work out what you should be setting it to without seeing your
XML document or the rest of your stylesheet...

But actually, there's nothing in your template that I can see that
would stop you from using the sum() function instead, something like:

  sum($supplies/load-quantity)
  
Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread