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
相关产品推荐
相关产品推荐

