Xpath 测试是否是数字或有效的数字表达式

问题描述 投票:0回答: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 也是有效的数值表达式。

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

xslt xpath
1个回答
0
投票

假设您不需要验证您的表达式,那么

4/0
甚至
4/+/9
都可以

<xsl:if test="translate(.,'0123456789.+-/* ','')=''">
   <isNumeric><xsl:value-of select="@id"/></isNumeric>
</xsl:if>
© www.soinside.com 2019 - 2024. All rights reserved.