Xpath测试if是数字还是有效数值表达式

时间:2013-09-26 08:30:19

标签: xslt xpath

通过例如:

找出节点值是否为数字非常简单
<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也是有效的数字表达式。

可以假设节点值不包含任何空格,因为它由使用的模式控制。

1 个答案:

答案 0 :(得分:0)

假设您不需要验证表达式,那么4/0甚至4/+/9都可以,那么

<xsl:if test="translate(.,'0123456789.+-/* ','')=''">
   <isNumeric><xsl:value-of select="@id"/></isNumeric>
</xsl:if>