2010-09-21 22 views
7

Próbuję sformatować ten i inne elementy podobne, tak to będzie wyglądać to 2,590:XSLT Format numer z przecinkiem

<Add_Amount>2,59</Add_Amount> 

Robi to tak:

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

.. ..

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

I wyjście wychodzi NaN. Każda pomoc jest bardzo doceniana.

Dzięki.

// Daniel

Odpowiedz

11

Zastosowanie:

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

Ta przemiana:

<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> 

po naniesieniu na dostarczonym dokumencie XML:

<Add_Amount>2,59</Add_Amount> 

produkuje poszukiwanych wynik:

2,590 

Problem z kodem jest że 2,59 nie jest prawidłowy numer i muszą być zamienione na takie, przed przekazaniem go jako pierwszy argument z format-number().

0

Można po prostu zrobić to tak:

<xsl:value-of select="format-number(number, '#,###')"/> 
+0

ta zwraca NaN – 8bitjunkie

3

Dodatkowy wywołanie translate() w odpowiedzi Dimitre Novatchev wydaje się zbędne. Zastosowanie <xsl:decimal-format> powinno wystarczyć, tak:

<xsl:decimal-format name="euroFormat" decimal-separator="," grouping-separator="."/> 
<xsl:value-of select="format-number(text(), '###.###,00', 'euroFormat')"/> 
+1

Tak jest źle: zwraca NaN – JohannThor