【问题标题】:Casting strings to numbers using XSLT使用 XSLT 将字符串转换为数字
【发布时间】:2011-02-13 21:02:27
【问题描述】:

有一个任务是使用 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)), '##.##'"/>

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

当我手动将源字符串从“小数逗号”格式“翻译”为“小数点”格式时,它会有所帮助

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

但它看起来很丑。

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

【问题讨论】:

    标签: xslt decimal numbers


    【解决方案1】:

    没有更正确或更集中的方式。 我这样做的方法是使用特殊的 xslt 对 XML 文件进行预处理,它也可以按照您的方式转换数字。

    【讨论】:

      【解决方案2】:

      您是否尝试过使用format-number 的语言环境参数? (format-number 有第三个可选参数)

      【讨论】:

      • 另外,如果您的语言环境设置正确并且您的解析器支持本地化,您可能需要摆脱“数字”调用,AFAI 知道它没有本地化。
      • 处理器是 PHP 5.3 中的 XSLTProcessor,我没有找到任何关于它的本地化的提及。应用程序区域设置正确: > 0,26
      • format-number 函数接受“数字”类型的参数并使用提供的格式选项将其转换为字符串。因此,在格式化节点值之前,需要将其转换为数字。这就是问题所在。
      猜你喜欢
      • 2014-05-05
      • 1970-01-01
      • 1970-01-01
      • 2014-01-03
      • 1970-01-01
      • 2016-03-23
      • 1970-01-01
      • 1970-01-01
      • 2019-10-10
      相关资源
      最近更新 更多