1

找出节点值是否为数字非常简单,例如:

<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 也是有效的数字表达式。

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

4

1 回答 1

0

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

<xsl:if test="translate(.,'0123456789.+-/* ','')=''">
   <isNumeric><xsl:value-of select="@id"/></isNumeric>
</xsl:if>
于 2013-10-05T11:25:44.413 回答