XSLT调用两个模板单独输出正常,相加结果显示NaN求助
XSLT数值相加出现NaN的解决方案
问题原因
从输出结果33.00 1,261.98 NaN可以看出,变量$A2的内容是带千位分隔符的格式化字符串1,261.98。XSLT的number()函数无法解析包含逗号的非纯数字字符串,会返回NaN,最终导致相加结果为NaN。
解决方案
1. 修改模板返回纯数字(推荐)
如果AWeight和BWeight模板的作用是计算数值,建议让它们直接返回纯数字值,而非带格式的字符串,格式化显示的逻辑单独处理:
<!-- 示例:修改BWeight模板返回纯数字 --> <xsl:template name="BWeight"> <xsl:param name="nodes"/> <!-- 这里写计算逻辑,比如求和,直接返回纯数字 --> <xsl:value-of select="sum($nodes/Weight)"/> </xsl:template>
之后在需要显示时,用format-number()做格式化:
<!-- 显示格式化后的数值 --> <xsl:value-of select="format-number($A1, '0.00')"/> <xsl:value-of select="format-number($A2, '#,##0.00')"/> <!-- 直接相加纯数字,再格式化结果 --> <xsl:value-of select="format-number($A1 + $A2, '#,##0.00')"/>
2. 相加前清理字符串中的逗号
如果无法修改原有模板,可在相加前用translate()函数移除$A2中的逗号:
<xsl:variable name="cleanA2" select="translate($A2, ',', '')"/> <!-- 清理后再转数字相加 --> <xsl:value-of select="number($A1) + number($cleanA2)"/>
3. 额外检查非数字字符
如果数值中还存在空格等其他非数字字符,可扩展translate()的清理范围:
<xsl:variable name="cleanA1" select="translate($A1, ' ', '')"/> <xsl:variable name="cleanA2" select="translate($A2, ', ', '')"/> <xsl:value-of select="number($cleanA1) + number($cleanA2)"/>
内容的提问来源于stack exchange,提问作者Akash
相关产品推荐
相关产品推荐

