xpath:number 对于"0"返回 false。



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

<xsl:if test="number($var)"><node att="{number($var)}" /></xsl:if>

如果var是空字符串,则此方法有效,但如果0 var则具有相同的效果:

从 -2 到 2:

<node att="-2" />
<node att="-1" />
<node att="1" />
<node att="2" />

这是一个错误吗?是否有不同版本的number函数也可以捕获0?我真的需要在test语句中添加or $var = '0'吗?

这完全符合 XPath 规范

根据定义boolean(0)false()

您需要

<xsl:if test="number($var) = number($var)">
  <node att="{number($var)}" />
</xsl:if>

解释

number($x) = number($x)

true() $x可铸造为数字的时间。

如果$x不能投射到一个数字,则上述 comaparison 的两边的计算结果都为 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>
如果

节点值为数字
,则取自 XPath 测试针对 NaN 测试值:

<xsl:if test="string(number(myNode)) != 'NaN'">
    <!-- myNode is a number -->
</xsl:if>

这是一个较短的版本:

<xsl:if test="number(myNode) = myNode">
    <!-- myNode is a number -->
</xsl:if>


<xsl:if test="number(0)">

表达式 number(0) 的计算值为 Boolean false() -- 因为根据定义

布尔值 (0) 为假 ()

在 XPath 2.0 中,尝试使用 $var castable as xs:integer$var castable as xs:double 等表达式。

相关内容

  • 没有找到相关文章

最新更新