使用XSLT将字符串转换为数字

问题描述:

有一项任务用于输出使用XSLT从数据库中获取的某些数据。应用程序当前的语言环境是ru_RU,因此小数点分隔符是逗号。它看起来像使用XSLT将字符串转换为数字

<data> 
    <row> 
    <date value="28.04.2010"/> 
    <clicks value="281"/> 
    <depth value="1,7"/> 
    <row> 
    <row> 
    <date value="29.04.2010"/> 
    <clicks value="15"/> 
    <depth value="3"/> 
    <row> 
<data> 

它需要格式化“深度”十进制数值:1,70和3,00。当我尝试变换值伊辛:

<xsl:value-of select="format-number(number(depth/@value)), '##.##'"/> 

我得到NaN的因为铸造属性值数时,XSLT处理器不考虑逗号作为小数点分隔符。

它有助于在某种程度上,当我手动“翻译”,从“十进制逗号”格式源字符串为“小数点”一个

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

,但它看起来相当丑陋。

是否有更正确和集中的方式告诉处理器逗号是小数点分隔符?

没有更正确或集中的方式。 我这样做的方式是用一个特殊的xslt预处理XML文件,这个特殊的xslt可以像你一样转换数字。

您是否尝试过使用format-number的区域设置参数? (format-number有第三个可选参数)

+0

不介意,它不起作用。 – baol 2010-04-29 15:35:08

+0

另外,如果您的语言环境设置正确,并且解析器支持本地化,您可能需要摆脱“数字”调用,但AFAI了解它不是本地化的。 – baol 2010-04-29 16:20:51

+0

处理器是PHP 5.3中的XSLTProcessor,我还没有发现任何关于它的本地化的提及。 应用程序语言环境设置正确: > 0,26 – 2010-04-30 07:35:44