找出节点值是否为数字非常简单,例如:
<xsl:if test="string(number(myNode)) != 'NaN'">
<!-- myNode is numeric -->
</xsl:if>
但是,如果 myNode 包含分数或其他有效的数字表达式怎么办?找出答案的最佳方法是什么?
示例 XML:
<data id="1">34</data>
<data id="2">52.3</data>
<data id="3">5/9</data>
<data id="4">10*20</data>
<data id="5">foo</data>
示例 XSL:
<xsl:for-each select="//data">
<xsl:if test="string(number(.)) != 'NaN'">
<isNumeric><xsl:value-of select="@id"/></isNumeric>
</xsl:if>
</xsl:if>
将生成输出:
<isNumeric>1</isNumeric>
<isNumeric>2</isNumeric>
但是,编写 xpath 表达式(或 xsl 代码)以生成以下输出的最简单方法是什么:
<isNumeric>1</isNumeric>
<isNumeric>2</isNumeric>
<isNumeric>3</isNumeric>
<isNumeric>4</isNumeric>
...因为数据 id 3 和 4 也是有效的数字表达式。
可以假设节点值不包含任何空格,因为这由使用的模式控制。