Ode*_*ded 120
根据NaN测试值:
<xsl:if test="string(number(myNode)) != 'NaN'">
<!-- myNode is a number -->
</xsl:if>
Run Code Online (Sandbox Code Playgroud)
这是一个较短的版本(感谢@Alejandro):
<xsl:if test="number(myNode) = myNode">
<!-- myNode is a number -->
</xsl:if>
Run Code Online (Sandbox Code Playgroud)
Dim*_*hev 55
测试变量中包含的值是否$v可以用作数字的最短方法是:
number($v) = number($v)
Run Code Online (Sandbox Code Playgroud)
您只需要将$v上面的内容替换为您要测试其值的表达式.
说明:
number($v) = number($v)显然是真的,如果$v是数字,或者是表示数字的字符串.
对于布尔值也是如此,因为a number(true())为1且number(false)为0.
无论什么时候$v都不能用作数字,那number($v)就是NaN
和NaN不等于任何其他值,即使对自己也是如此.
因此,上述表达式仅适用$v于其值可用作数字的情况,否则为false.
sha*_*piy 18
您可以使用XPath 2.0中的一个惊人的类型测试运算符:
<xsl:if test="$number castable as xs:double">
<!-- implementation -->
</xsl:if>
Run Code Online (Sandbox Code Playgroud)
jas*_*sso 15
我不是试图提供另一种替代解决方案,而是对这个问题的"元视图".
Oded和Dimitre Novatchev已经提供的答案是正确的,但人们真正用短语"价值是一个数字"的意思是,我怎么说,可以解释.
在某种程度上,这一切都来自这个奇怪的声音问题:"你想如何表达你的数值?"
XPath函数number()处理具有的数字
请注意,这不包括数值的表达式
这些不仅仅是制定标准.具有根据模式的内容的元素是有效值xs:float可以包含任何上述特征.然而,number()会回报价值NaN.
因此,请回答您的问题"如果节点值是数字,我如何检查XPath?" 是"使用已经提到的解决方案使用number()"或"使用单个XPath 1.0表达式,你不能".考虑一下您可能遇到的可能的数字格式,如果需要,可以为验证/数字解析编写某种逻辑.例如,在XSLT处理中,这可以通过几个合适的额外模板来完成.
PS.如果您只关心非零数字,那么最短的测试就是
<xsl:if test="number(myNode)">
<!-- myNode is a non-zero number -->
</xsl:if>
Run Code Online (Sandbox Code Playgroud)
小智 9
我发现非常有用的是以下内容:
<xsl:choose>
<xsl:when test="not(number(myNode))">
<!-- myNode is a not a number or empty(NaN) or zero -->
</xsl:when>
<xsl:otherwise>
<!-- myNode is a number (!= zero) -->
</xsl:otherwise>
</xsl:choose>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
91832 次 |
| 最近记录: |