You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在XSL中提取并格式化价格为两位小数?

解决XSL中价格格式化为两位小数的问题

看起来你的当前代码处理后得到的字符串里包含了多余内容,我们需要先提取出正确的价格数值,再将其格式化为89.00这样的两位小数形式。下面分XSLT版本给出解决方案:

如果你使用的是XSLT 2.0及以上版本(推荐)

这个版本支持更强大的字符串处理函数,一行代码就能搞定:

<xsl:value-of select="format-number(tokenize(normalize-space(translate(g:price, ' PLN', '')), ' ')[last()], '0.00')"/>

代码解释:

  • translate(g:price, ' PLN', ''):移除价格字符串中的空格和PLN字符
  • normalize-space():去除字符串首尾空格并将中间多个空格合并为一个
  • tokenize(..., ' '):将处理后的字符串按空格分割成多个子片段
  • [last()]:取分割后的最后一个元素,也就是目标价格数值89.0000
  • format-number(..., '0.00'):将数值格式化为保留两位小数的形式

如果你使用的是XSLT 1.0版本

XSLT 1.0没有tokenize函数,需要用递归模板提取最后一个数值,再进行格式化:

首先定义一个用于提取最后一个字符串片段的模板:

<xsl:template name="get-last-token">
  <xsl:param name="string"/>
  <xsl:choose>
    <xsl:when test="contains($string, ' ')">
      <xsl:call-template name="get-last-token">
        <xsl:with-param name="string" select="substring-after($string, ' ')"/>
      </xsl:call-template>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="$string"/>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

然后在需要处理价格的地方使用以下代码:

<!-- 先处理原始价格字符串,移除多余字符和空格 -->
<xsl:variable name="processed-price" select="normalize-space(translate(g:price, ' PLN', ''))"/>

<!-- 调用模板提取最后一个数值部分 -->
<xsl:variable name="raw-price">
  <xsl:call-template name="get-last-token">
    <xsl:with-param name="string" select="$processed-price"/>
  </xsl:call-template>
</xsl:variable>

<!-- 格式化为两位小数 -->
<xsl:value-of select="format-number(number($raw-price), '0.00')"/>

代码解释:

  • 模板get-last-token通过递归调用,每次截取空格后的字符串,直到没有空格为止,最终得到最后一个数值片段
  • number($raw-price)将提取到的字符串转换为数值类型,确保format-number能正确处理
  • format-number(..., '0.00')负责将数值格式化为两位小数的形式

这样处理后,就能把你的原始输出转换成89.00的格式啦。

内容的提问来源于stack exchange,提问作者Dawid Kwiatoń

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:09:35