查找实数和十进制数

时间:2011-03-30 04:42:15

标签: xml xslt

我正在使用xslt1.0进行html到xml的转换。

<xsl:variable name="margin">0</xsl:variable>

<xsl:if test="number($margin)">
<xsl:message>Its number</xsl:message>
</xsl:if>

这是满足条件和显示消息的模板。如果变量margin的值为0.5,则条件变为false。

如何编写匹配小数的条件?

2 个答案:

答案 0 :(得分:2)

     <xsl:template match="/">
      <xsl:variable name="margin">0</xsl:variable>

      <xsl:if test="number($margin)">
       <xsl:message>Its number</xsl:message>
      </xsl:if> </xsl:template>

This is my template which satisfying the condition and displaying message.
If the variable margin's value is 0.5, then the condition becomes false.

这根本不是真的。使用9个不同的xslt处理器(XSLT 1.0和2.0)进行测试,上面的代码不会产生任何消息。另一方面,任何不同于0的数值都会产生消息。

<强>解释

由于number(0)0boolean(0)false(),因此测试未成功。

<强>解决方案

使用此XPath表达式:

number($x) = number($x)

true()是一个数字时,此表达式的计算结果为$x,然后它等同于:

$x = $x

$x不是数字时,上面的XPath表达式的计算结果为false(),因为它等同于:

NaN = NaN

按定义NaN不等于任何其他值,包括NaN本身。

答案 1 :(得分:0)

我尝试了你的代码(使用MSXSL.EXE,它需要在消息上使用terminate =“yes”以查看其输出)并且发现,正如我预期的那样,反之亦然。当$ margin为零时,“if”不会发生,但如果它是非零(例如,0.5),则执行“if”。这是因为测试表达式的评估语义与“boolean()”函数相同,它将数值零解释为false,将任何非零数值解释为true。