xslt - xpath:number 为 "0"返回 false

标签 xslt xpath numbers xslt-1.0

我有一个 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/

相关文章:

xml - Firefox 和远程 XSL 样式表

xml - 如何通过 XPath 对值进行排序

java - 逐行打印数字的递归方法

java - 如何在java中查找<Strong><br>标签的工具提示文本消息

jquery - CSS 选择器查找具有指定 <option> 标签的 <select>

c++ - 埃拉托色尼筛法 - 质因数

php - 如何在 PHP 中获取十进制数 "hidden"的二进制数列表?

xml - XSLT Concat 字段在一起

javascript - 为什么这个弹出窗口打开时是空白的?

c# - JIT 编译器遇到内部限制。 VS2008