<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
.