OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.


Help: OASIS Mailing Lists Help | MarkMail Help

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [xml-dev] calculating list of values using variables

here's my feeble effort :)

<xsl:transform xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
  <xsl:template match='/'>
    <xsl:variable name='result'>
     <xsl:call-template name='sum'>
        <xsl:with-param name='amounts'
select='/detailss/details/detail/amount' />
        <xsl:with-param name='quants'
select='/detailss/details/detail/quantity' />
        <xsl:with-param name='tally' select='0' />
    <result><xsl:value-of select='$result' /></result>

  <xsl:template name='sum'>
    <xsl:param name='amounts'/>
    <xsl:param name='quants'/>
    <xsl:param name='running'/>
     <xsl:when test='count($amounts)!=0'>
       <xsl:call-template name='sum'>
         <xsl:with-param name='amounts' select='$amounts[position()>1]'
         <xsl:with-param name='quants' select='$quants[position()>1]' />
         <xsl:with-param name='tally'
select='$amounts[1]*$quants[1]+$tally' />
       <xsl:value-of select='$tally'/>


and i hope your document looks like this ...

<?xml version='1.0'?>

-----Original Message-----
From: Ian Rogers [mailto:ian.rogers@net800.co.uk]
Sent: Wednesday, September 19, 2001 12:02 PM
To: 'Xml-Dev
Subject: [xml-dev] calculating list of values using variables

can anyone help.

I sent a post out before about trying to use variables, and have been
some code but it comes up with the error "Keyword xsl:stylesheet may not
contain PCDATA nodes."

I have a set of details which contain an amount and a quantity and i
want to
calculate the total amount for each set of details. I can calculate that
place it in a variable, but i now want to calculate the total for all
sets of details, giving an overall amount for all the sets of details

<xsl:variable name="Items" select="//details"/>

   <xsl:variable name="TotalValue">
    <xsl:call-template name="Total">
     <xsl:with-param name="Items" select="$Items"/>
     <xsl:with-param name="RunningTotal"    select="0"/>

    Total = <xsl:value-of
    select="format-number($TotalValue, '####0.0#')"/>

 <xsl:template name="Total">
  <xsl:param name="Items"/>
  <xsl:param name="RunningTotal"/>
   <xsl:when test="not($Items)">
    <xsl:copy-of select="$RunningTotal"/>
  <xsl:variable name="CurrentTotal"
			 select="$RunningTotal + ($Items[1]/amount *

   <xsl:call-template name="Total">
    <xsl:with-param name="Items" select="$Items[position()>1]"/>
    <xsl:with-param name="RunningTotal" select="$CurrentTotal"/>

"then i am calling the rest of my code to generate the table by using a
template and matching on the root node. I don't know if this could be
causing a problem?

<xsl:template match="/">

i would be very grateful if anyone could see what i am doing wrong or if
there is another way to calculate the total amount



The xml-dev list is sponsored by XML.org <http://www.xml.org>, an
initiative of OASIS <http://www.oasis-open.org>

The list archives are at http://lists.xml.org/archives/xml-dev/

To subscribe or unsubscribe from this elist use the subscription
manager: <http://lists.xml.org/ob/adm.pl>