xsl-list
[Top] [All Lists]

Re: [xsl] Format Number and Empy Elements

2007-08-07 01:43:43
On 8/7/07, Mark Anderson <mark(_dot_)anderson(_at_)technique-group(_dot_)com> 
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

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>