xpath:number为"0"返回false

bit*_*ask 4 xslt xpath numbers xslt-1.0

我有一个xsl:variable可以是空字符串或数字.所以我评估它是这样的:

<xsl:if test="number($var)"><node att="{number($var)}" /></xsl:if>
Run Code Online (Sandbox Code Playgroud)

这是有效的,如果var是空字符串,但它具有相同的效果,如果var0:

从-2到2:

<node att="-2" />
<node att="-1" />
<node att="1" />
<node att="2" />
Run Code Online (Sandbox Code Playgroud)

这是一个错误吗?是否有不同版本的number功能也可以捕获0?我真的要加上or $var = '0'我的test陈述吗?

Dim*_*hev 5

这完全符合XPath规范:

根据定义boolean(0)false()

你想要:

<xsl:if test="number($var) = number($var)">
  <node att="{number($var)}" />
</xsl:if>
Run Code Online (Sandbox Code Playgroud)

说明:

number($x) = number($x)
Run Code Online (Sandbox Code Playgroud)

true()什么时候$x可以转换为数字.

如果$x不能转换为数字,则上述comaparison的两侧都会评估NaN,并且根据定义NaN不等于任何值,包括NaN.

注意:

如果你想检查是否$var整数,那么使用:

<xsl:if test="floor($var) = $var">
  <node att="{$var}" />
</xsl:if>
Run Code Online (Sandbox Code Playgroud)

或者,或者:

<xsl:if test="not(translate($var, '0123456789', ''))">
  <node att="{$var}" />
</xsl:if>
Run Code Online (Sandbox Code Playgroud)