Subject: RE: [xsl] Summing a Calculation From: Mark Swardstrom <mark@xxxxxxxxxx> Date: Thu, 21 Jun 2001 16:19:20 -0700 |
I need to multiply each line by the quantity to get the amount per item. Visually - it would look like this ID Price Qty Amount 1 1.34 4 5.36 2 5.77 3 17.31 5 12.99 1 12.99 TOTAL 35.66 That TOTAL number (35.66) is the one I'm hoping to generate in a single line. Here's my current solution, but would like to reduce: XML <order> <item> <id>1</id> <price>1.34</price> <quantity>4</quantity> </item> <item> <id>2</id> <price>5.77</price> <quantity>3</quantity> </item> <item> <id>5</id> <price>12.99</price> <quantity>1</quantity> </item> </order> XSL <xsl:variable name="total"> <xsl:call-template name="calcTotal"> <xsl:with-param name="sum" select="'0'"/> <xsl:with-param name="node" select="item[1]"/> </xsl:call-template> </xsl:variable> <xsl:value-of select="format-number($total, '$#,##0.00')"/> <xsl:template name="calcTotal"> <xsl:param name="sum"/> <xsl:param name="node"/> <xsl:choose> <xsl:when test="$node/following-sibling::item"> <xsl:call-template name="calcTotal"> <xsl:with-param name="sum" select="$sum + ($node/price * $node/quantity)"/> <xsl:with-param name="node" select="$node/following-sibling::item[1]"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="$sum + ($node/price * $node/quantity)"/> </xsl:otherwise> </xsl:choose> </xsl:template> -----Original Message----- From: bryan.s.schnabel@xxxxxxxxxxxxxx [mailto:bryan.s.schnabel@xxxxxxxxxxxxxx] Sent: Thursday, June 21, 2001 3:54 PM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: RE: [xsl] Summing a Calculation This works: <xsl:template match="order"> <b> <xsl:text>Total Price: </xsl:text> <xsl:value-of select="sum(item/price)"/> </b> </xsl:template> -----Original Message----- From: Mark Swardstrom [mailto:mark@xxxxxxxxxx] Sent: Thursday, June 21, 2001 11:55 AM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: [xsl] Summing a Calculation I'm trying to get the sum of a purchase order, which seems simple, but I can't find an easy solution. Consider the following XML: <order> <item> <id>1</id> <price>1.34</price> <quantity>4</quantity> </item> <item> <id>2</id> <price>5.77</price> <quantity>3</quantity> </item> <item> <id>5</id> <price>12.99</price> <quantity>1</quantity> </item> </order> I was trying to do something along these lines: <xsl:template match="order"> <xsl:apply-templates select="item"/> <b>Total price: <xsl:value-of select="sum(item/price * item/quantity)"/></b> </xsl:template> To get a total amount for the entire order. But that gives the following error. Can not convert #NUMBER to a NodeList! Before I go down the (seemingly too complex) recursive loop approach, I was wondering if anyone else had another idea. Thanks. - Mark XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Summing a Calculation, Thomas B. Passin | Thread | Re: [xsl] Summing a Calculation, Frank Chen |
Re: [xsl] xsl:import and caching un, Scott Hernandez | Date | Re: [xsl] Language translation, Sebastian Rahtz |
Month |