我已经编写了一个XSLT代码来从字符串中提取数字字符.
这是测试xml :(
看起来很奇怪,但我期待很多来自XSLT)
<xml>
<tag>10a08bOE9W234 W30D:S</tag>
<tag>10.233.23</tag>
</xml>
Run Code Online (Sandbox Code Playgroud)
这是我正在尝试的XSLT代码:
<xsl:template match="tag">
<tag>
<xsl:value-of select="number(translate(., 'a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|.|:| ', ''))"/>
<!-- I am not happy writing this line .. is there any light weight code replacement-->
</tag>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
输出..
<tag>1008923430</tag>
<tag>1023323</tag>
Run Code Online (Sandbox Code Playgroud)
..
而且..我想要第二个标签输出就像10.23323
ie,只允许第一个小数点.
而忽略后续的那些..
是否只能使用XSLT 1.0?
第一行的单个XPath表达式:
translate(., translate(.,'0123456789', ''), '')
请注意,任何非数字字符(事先未知)都将被删除.
对于第二行使用:
concat(
substring-before(
translate(., translate(.,'.0123456789', ''), ''),
'.'
),
substring(
translate(., translate(.,'.', ''), ''),
1,
1
),
translate(
substring-after(
translate(., translate(.,'.0123456789', ''), ''),
'.'
),
'.',
''
)
)
Run Code Online (Sandbox Code Playgroud)
两种解决方案都可以组合成一个单独的XPath表达式:只需在第二个解决方案中替换
.
Run Code Online (Sandbox Code Playgroud)
同
concat(.,'.0')