XSLT 1.0 如何测试数字

4

如何测试元素的值是否为数字/可转换为数字?

我的需求是,如果值是一个数字,将其复制,如果是一个字符串,则用99替换它。

3个回答

3

string(number($x)) = 'NaN' 用于测试 $x 是否可转换为数字。



1

除了 @Michael Kay 的正确答案之外:

number($x) = number($x)

这个表达式在$x可以转换为数字时返回true()

我们利用以下事实:

  1. 如果$x不是一个数字,那么根据定义,number($x)就是NaN

  2. NaN不等于任何值,甚至不等于NaN

现在,你的最终问题是:

我需要做的是,如果它是一个数字,则复制该值,并将其替换为99,如果它是一个字符串

使用方法:

  $x * (number($x) = number($x))
+
  99 * not(number($x) = number($x))
解释:当布尔值作为数值表达式的一部分时,它会被转换为数字(true() --> 1,false() --> 0)。在上述表达式中,+ 的一个参数将是 0,另一个参数将是 1,具体取决于 $x 是否为数字。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接