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

3

有一个任务需要使用XSLT从数据库输出一些数据。应用程序当前的区域设置为ru_RU,因此十进制分隔符是逗号。它看起来像这样:

<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)), '##.##'"/>

当将属性值转换为数字时,XSLT处理器不会将逗号视为小数分隔符,因此我得到了 NaN

当我手动将源字符串从“小数逗号”格式转换为“小数点”格式时,它在某种程度上有所帮助。

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

但它看起来相当丑陋。

有没有更正确和集中的方法告诉处理器逗号符号是十进制分隔符?

2个回答

2

没有更正确或更集中的方式。 我的做法是使用特殊的XSLT预处理XML文件,将数字转换为您所做的方式。


1

你尝试过使用format-number的locale参数吗?(format-number有第三个可选参数)


此外,如果您的区域设置正确并且解析器支持本地化,您可能需要摆脱“number”调用,据我所知它没有本地化。 - baol
处理器是 PHP 5.3 中的 XSLTProcessor,我没有找到任何关于其本地化的提及。应用程序区域设置已正确设置:> 0,26 - Sergei Morozov
format-number函数接受一个“number”类型的参数,并使用提供的格式选项将其转换为字符串。因此,在格式化节点值之前,需要将其转换为数字。这就是问题所在。 - Sergei Morozov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接