|
Subject: Re: Performing an expression on attributes of a node-set From: Nick Browne <NickBrowne@xxxxxxxxxxxxxxx> Date: Wed, 27 Sep 2000 20:33:14 +0100 |
Jim Sproull wrote:
> But I need the sum of each (price*qty). I tried everything I could think
> of, but no luck. Any clues on how to do this?
A solution follows. However, as an alternative, assuming you are in control of
the source document, could you include another attribute which is simply @qty *
@price. You could then use sum( .. ). Sometimes a bit of redundancy is not a
bad thing !
Otherwise :
<xsl:variable name="Items" select="//Item"/>
<xsl:variable name="TotalValue">
<xsl:call-template name="Total">
<xsl:with-param name="Items" select="$Items"/>
<xsl:with-param name="RunningTotal" select="0"/>
</xsl:call-template>
</xsl:variable>
Total = <xsl:value-of select="format-number($TotalValue, '####0.0#')"/>
</xsl:template>
<xsl:template name="Total">
<xsl:param name="Items"/>
<xsl:param name="RunningTotal"/>
<xsl:choose>
<xsl:when test="not($Items)">
<xsl:copy-of select="$RunningTotal"/>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="CurrentTotal"
select="$RunningTotal + ($Items[1]/@qty * $Items[1]/@price)"/>
<xsl:call-template name="Total">
<xsl:with-param name="Items" select="$Items[position()>1]"/>
<xsl:with-param name="RunningTotal" select="$CurrentTotal"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Regards
Nick Browne
Slipstone Ltd
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Performing an expression on attribu, Jim Sproull | Thread | RE: Performing an expression on att, Kay Michael |
| Re: off-topic XML Schema's, Henry S. Thompson | Date | RE: Problems with XSL code, Darrin Bishop |
| Month |