Subject: Re: [xsl] Format Number and Empy Elements From: "Andrew Welch" <andrew.j.welch@xxxxxxxxx> Date: Tue, 7 Aug 2007 09:43:20 +0100 |
On 8/7/07, Mark Anderson <mark.anderson@xxxxxxxxxxxxxxxxxxx> wrote: > Hi All > > You guys helped me out with avoiding empty elements when summing > > Sum(my_node[text()]) > > Works fantastically, but I'm still plagued by 'NaN' in my output. This > time it's caused by: > > format-number(discount, '$#,.00') > > If I have <discount/> in my XML I want to display $0.00 in the output; > however, when discount is an empty element, I get NaN > > The only way I can think of to get around it is something like: > > <xsl:choose> > <xsl:when test="string(number(discount))='NaN'"> > Discount: <xsl:value-of select="format-number(0, > $currencyformat)"/> > </xsl:when> > <xsl:otherwise> > Discount: <xsl:value-of select="format-number(discount, > $currencyformat)"/> > </xsl:otherwise> > </xsl:choose> > > Seem awfully long-winded. Anyone got any ideas? Sometimes XSLT 1.0 is awfully long winded... However you could do: <xsl:text>Discount: </xsl:text> <xsl:apply-templates select="discount"/> <xsl:template match="discount[number(.)]"> <xsl:value-of select="format-number(., $currencyFormat)"/> </xsl:template> <xsl:template match="discount[not(number(.))]"> <xsl:value-of select="format-number(0, $currencyFormat)"/> </xsl:template> It's the same amount of code, but perhaps structured a little better. If XSLT 2.0 it's just: format-number((.[number(.)],'0')[1], $currencyFormat) which is nice :) -- http://andrewjwelch.com
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Format Number and Empy Elemen, Mark Anderson | Thread | RE: [xsl] Format Number and Empy El, Michael Kay |
[xsl] Format Number and Empy Elemen, Mark Anderson | Date | Re: [xsl] Question about XSLTC, David Carlisle |
Month |