xslt中的format-number() - 常量小数部分

时间:2016-09-05 12:57:51

标签: xml xslt

我刚开始使用xslt并希望将值“0000011287000”转换为“1,1287000”。所以,基本上最后7位数是带小数分隔符的小数','。

如果值为'0000007748300',则必须返回'0,7748300'。

我尝试在xslt 2.0中使用format-number(),它适用于前一种情况但不适用于后者,正如预期的那样,因为它返回'7748300'。

号格式($值, '#,#######')

我的下一个想法是将数字拆分并与小数分隔符连接,这可能是一种丑陋的方式。所以,试着看看是否有可以使用format-number()本身完成的事情。

1 个答案:

答案 0 :(得分:1)

我会将输入乘以1E-7,然后使用format-number:

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

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

    <xsl:template match="data">
        <xsl:copy>
            <xsl:value-of select="format-number(. * 1E-7, '0,0000000')"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:transform>

转换

<root>
    <data>0000011287000</data>
    <data>0000007748300</data>
</root>

<root>
    <data>1,1287000</data>
    <data>0,7748300</data>
</root>