通过例如:
找出节点值是否为数字非常简单<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也是有效的数字表达式。
可以假设节点值不包含任何空格,因为它由使用的模式控制。
答案 0 :(得分:0)
假设您不需要验证表达式,那么4/0
甚至4/+/9
都可以,那么
<xsl:if test="translate(.,'0123456789.+-/* ','')=''">
<isNumeric><xsl:value-of select="@id"/></isNumeric>
</xsl:if>