Re: [xsl] Format Number and Empy Elements

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