Subject: Re: 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
|