我正在使用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。
如何编写匹配小数的条件?
答案 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)
为0
且boolean(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。