RE: [xsl] get the sum of a sequence of numbers

Subject: RE: [xsl] get the sum of a sequence of numbers
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Wed, 26 Apr 2006 22:05:40 +0100
> That does not seem to work in this situation.

Gives the wrong answer? Gives an error message? Catches fire? It's a lot
easier to diagnose problems when you know what the symptoms are.

> 
>         <xsl:variable name="mbt" select="sum(for $n in 
> number($mb) return number($n))"/>

number($mb) is going to produce a single number as its result. So this is
the same as select="sum(number($mb))" which is the same as
select="number($mb)". I don't know what $mb is, but if it's a sequence of
strings that can be converted to numbers then you want

>         <xsl:variable name="mbt" select="sum(for $n in $mb return
number($n))"/>

that is, you want to convert the strings to numbers individually.

However, $mb isn't a sequence of strings, because you declared it as:

      <xsl:variable name="mb">
           <xsl:apply-templates mode="mb"/>
       </xsl:variable>  

which means $mb is actually a single document node; so the "for" expression
isn't going to do anything useful. I can't tell how to correct this without
knowing what's coming back from the apply-templates.

> Do I need to define the data type of the sequence? 

It never does any harm, and it sometimes means you get better diagnostics
(or error messages rather than empty output).

Michael Kay
http://www.saxonica.com/

Current Thread