xsl-list
[Top] [All Lists]

Re: [xsl] XSLT 1.0 newbie: sum of selected elements

2006-12-11 07:49:06
On 12/11/06, Kirov Plamen <pkirov(_at_)globul(_dot_)bg> wrote:
Hello,

I'm trying to sum the selected values from xml, using xsl with Xalan:

XML:

<root>
        <element>
                <type id=1 des="a"/>
                <amount due=10.12 init=0.25/>
        </element>
        <element>
                <type id=2 des="a"/>
                <amount due=1.82 init=1.00/>
        </element>
        <element>
                <type id=1 des="a"/>
                <amount due=-12.00 init=0.00/>
        </element>
        <element>
                <type id=3 des="a"/>
                <amount due=50.00 init=120.35/>
        </element>
</root>


I want to sum @due only for @id=2 or 3

XSL:

<xsl:value-of select="sum(..//element[type/@id = 2 or type/@id =
3]/amount/@due)"/>


If I want to sum by more than 5 different Id's or/and for more amount
values(@due, @init...), this method of sorting values is unusual - a lot
of repeated "or" clauses for every "select". Is't possible, for this
example, elements with @id 2 or 3 to be selected first and after to be
summarized @due and/or @init?

You can use a variable to hold the first selection:

<xsl:variable name="elems" select="element[type/@id = 1 or type/@id = 2"/>

Then use sum() on the variable:

<xsl:value-of select="sum($elems/amount/@due)"/>
or
<xsl:value-of select="sum($elems/amount/@init)"/>

By the way, you really should take the time to post well-formed XML
for your sample input -  especially if you would like someone to take
the time to answer you.

cheers
andrew

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