我有一个 xsl:variable
它可以是空字符串或数字。所以我是这样评价的:
<xsl:if test="number($var)"><node att="{number($var)}" /></xsl:if>
如果
var
,这有效是空字符串,但如果 var
也有同样的效果是 0
:从 -2 到 2:
<node att="-2" />
<node att="-1" />
<node att="1" />
<node att="2" />
这是一个错误吗?是否有不同版本的
number
也捕获 0
的函数?我真的要加or $var = '0'
吗?到我的 test
陈述?
最佳答案
这完全符合 XPath specification :
根据定义 boolean(0)
是 false()
你想要 :
<xsl:if test="number($var) = number($var)">
<node att="{number($var)}" />
</xsl:if>
说明 :
number($x) = number($x)
当
true()
可转换为数字时,它就是 $x
。如果
$x
不能转换为数字,则上述比较的两边都计算为 NaN
,并且根据定义 NaN
不等于任何值,包括 NaN
。注意:
如果您想检查
$var
是否为整数,请使用:<xsl:if test="floor($var) = $var">
<node att="{$var}" />
</xsl:if>
或者,或者:
<xsl:if test="not(translate($var, '0123456789', ''))">
<node att="{$var}" />
</xsl:if>
关于xslt - xpath:number 为 "0"返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10367749/