Слишком поздно проверять NaN в сгенерированном результате.
Следует предотвращать создание нежелательных выходных данных !
Вот пример, который избегает генерации NaN:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="num[number(.) = number(.)]">
<span style="margin-top:{.}"/>
</xsl:template>
<xsl:template match="num[not(number(.) = number(.))]"/>
</xsl:stylesheet>
Когда это преобразование применяется к следующему документу XML :
<t>
<num>helo</num>
<num></num>
<num>100</num>
<num>1.234234</num>
</t>
производится только правильный вывод (без NaN) :
<t>
<span style="margin-top:100"/>
<span style="margin-top:1.234234"/>
</t>