如果测试NaN

时间:2019-06-25 12:03:48

标签: xslt

我有一个带有代码的xsl模板

 <xsl:if test="(base_extra_fee_rule_amount='75.0000')">

但是我希望代码在该字段有任何值的情况下运行,或者如果该字段为NaN则不运行代码

我尝试了

<xsl:if test="not(base_extra_fee_rule_amount='NaN')">

但是那是行不通的,有没有简单的方法可以做到这一点?

3 个答案:

答案 0 :(得分:2)

不确定您的目的是什么。

通常,您可以使用谓词选择/匹配具有有效数值的节点-例如:

<xsl:template match="amount[number()=number()]">

答案 1 :(得分:2)

测试X是否为NaN的最简单方法是(X=X),因为只有X为NaN时,该表达式才会返回false。

如果您想要一个更具可读性的表达式,那么string(number(X))='NaN'可以完成工作。

但是,请注意,操作数base_extra_fee_rule_amount返回元素节点或不返回任何内容。只有数字类型的值可以是NaN,因此在尝试将其转换为数字之前,元素不会是NaN。这可以显式地或隐式地发生,并且详细信息取决于您使用的是XSLT 1.0还是2.0,在后一种情况下取​​决于它是否支持架构。在此阶段,尚不清楚您要应用哪种测试。您是否有兴趣测试该元素是否具有字符串值“ NaN”,还是有兴趣测试该元素是否具有非数字值?

答案 2 :(得分:-1)

PaddyD:-

感谢通知:-

    <xsl:template match="base_extra_fee_rule_amount!=''"> <xsl:text>@@@@</xsl:text> </xsl:template>