number()有时包含逗号和小数。我怎样才能检查它是否是一个数字

时间:2014-01-09 16:26:16

标签: xml xslt xpath xslt-1.0

我正在测试文档的第一个节点是否具有数字值。 我试着通过简单地做

来做到这一点
<xsl:when test="number(//ss:wd[0])">    <!---ss: being the namespace prefix-->
<!--- My code -->
</xsl:when>

但是,它没有返回预期的结果。我认为这是因为检查的值有时会有逗号和/或小数。

那么,XSLT不认为'1.1'或1,000.1'是数字吗? 我该如何解决这个问题?

添加了: 我正在使用选择和何时因为我想检查其他选项,例如它是否具有特定值

2 个答案:

答案 0 :(得分:3)

  

那么,XSLT不认为'1.1'或1,000.1'是数字吗?

number()函数(BTW是XPath函数,而不是XSLT)将“1.1”视为数字,将“1,000.1”视为NaN(非数字)。 IOW,小数句点被识别,逗号 - 任何角色 - 都不是。

您可以在执行测试之前翻译逗号 - 假设这是唯一的障碍。

答案 1 :(得分:1)

XSLT / XPath无法处理分组选择器。在使用translate进行测试以删除它们之前,请先使用number()(尽管这会导致某些非数字漏掉,例如,,,0等)。

number(translate(//ss:wd[0], ',', ''))