Search code examples
xmlxsltformat

XSLT format-number with comma


I'm trying to format this and other elements alike, so it would look like this 2,590:

<Add_Amount>2,59</Add_Amount>

Doing it like this:

<xsl:decimal-format name="dkk" decimal-separator="," grouping-separator="."/>

....

    <xsl:value-of select="translate(format-number(Add_Amount, '#.###,000', 'dkk'), ',', '.')" />

And the output comes out NaN. Any help is greatly appreciated.

Thanks.

//Daniel


Solution

  • Use:

    format-number(translate(., ',','.'), '#.###,000', 'd')
    

    This transformation:

    <xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     <xsl:output method="text"/>
    
     <xsl:decimal-format name="d"
      decimal-separator="," grouping-separator="."/>
    
     <xsl:template match="/">
       <xsl:value-of select=
       "format-number(translate(., ',','.'), '#.###,000', 'd')"/>
     </xsl:template>
    </xsl:stylesheet>
    

    when applied on the provided XML document:

    <Add_Amount>2,59</Add_Amount>
    

    produces the wanted result:

    2,590
    

    The problem with your code is that 2,59 isn't a valid number and must be converted to such, before passing this as the first argument of format-number().