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

XSL 1.0非零金额字段显示:如何判断非£0.00格式值?

解决XSL中判断带英镑符号的金额是否为零的问题

嘿,我明白你的问题啦!你之前用<xsl:if test="line_value != 0">没生效,确实是因为line_value是带英镑符号的字符串(比如£0.00),直接和数字0对比肯定不匹配——字符串和数字是不同类型,XSL的比较逻辑在这里不会自动转换类型,所以得换个思路处理。

下面给你两种实用的解决方案,根据你的实际场景选就行:

方案1:直接匹配固定格式的字符串

如果你的line_value格式固定是£0.00(没有其他变体,比如£0或者带空格的情况),直接用字符串比较最直接:

<xsl:if test="line_value != '£0.00'">
  <xsl:with-param name="value" select="unit_quantity"/>
</xsl:if>

或者用not()逻辑也可以,效果完全一样:

<xsl:if test="not(line_value = '£0.00')">
  <xsl:with-param name="value" select="unit_quantity"/>
</xsl:if>

方案2:提取数字部分再判断(更通用)

如果line_value可能有其他格式(比如£0、£0.0,甚至前后带空格),那先提取数字部分再转成数字判断会更可靠:

适用于XSLT 1.0

用substring-after去掉英镑符号,再转成数字:

<xsl:if test="number(substring-after(line_value, '£')) != 0">
  <xsl:with-param name="value" select="unit_quantity"/>
</xsl:if>

如果担心有前后空格,可以先做归一化:

<xsl:if test="number(substring-after(normalize-space(line_value), '£')) != 0">
  <xsl:with-param name="value" select="unit_quantity"/>
</xsl:if>

适用于XSLT 2.0及以上

可以用replace去掉所有非数字和小数点的字符,再转数字,兼容性更强:

<xsl:if test="number(replace(line_value, '[^0-9.]', '')) != 0">
  <xsl:with-param name="value" select="unit_quantity"/>
</xsl:if>

小提醒

如果测试后还是有问题,可以先输出line_value的实际内容看看,比如用<xsl:value-of select="line_value"/>,确认是不是有隐藏的空格、特殊字符或者格式和你预想的不一样,这经常是这类问题的诱因哦!

内容的提问来源于stack exchange,提问作者Richard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:24:11