我是xslt的新手.我的要求是根据业务规范将xml文件转换为文本文件.我遇到了一个字符串格式问题.如果您有任何想法,请帮帮我.
以下是输入xml数据的一部分:"0001295"
打印到文本文件的预期结果:1295
我的主要问题是删除前导零.如果您有任何逻辑/功能,请分享.
Dim*_*hev 23
只需使用这个简单的表达:
number(.)
Run Code Online (Sandbox Code Playgroud)
这是一个完整的例子:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="t">
<xsl:value-of select="number(.)"/>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
应用于此XML文档时:
<t>0001295</t>
Run Code Online (Sandbox Code Playgroud)
产生了想要的正确结果:
1295
Run Code Online (Sandbox Code Playgroud)
II.使用format-number()
format-number(., '#')
Run Code Online (Sandbox Code Playgroud)
有几种方法可以做到这一点.如果值完全是数字(例如,不是CSV行或产品代码的一部分,例如ASN0012345),则可以将字符串转换为数字并再次转换为字符串:
string(number($value)).
Run Code Online (Sandbox Code Playgroud)
否则只需在开始时替换0:
replace( $value, '^0*', '' )
Run Code Online (Sandbox Code Playgroud)
'^'是必需的(标准正则表达式语法)或值001201将被替换为121(删除所有零).
希望有所帮助.戴夫
这是在XSLT 1.0中可以实现的一种方法.
首先,通过删除当前值中的所有零元素来查找第一个非零元素
<xsl:variable name="first" select="substring(translate(., '0', ''), 1, 1)" />
Run Code Online (Sandbox Code Playgroud)
然后,您可以在第一个字符之前找到子字符串,然后使用substring-after获取此后的非零部分
<xsl:value-of select="substring-after(., substring-before(., $first))" />
Run Code Online (Sandbox Code Playgroud)
或者,将两个语句合并为一个
<xsl:value-of select="substring-after(., substring-before(., substring(translate(., '0', ''), 1, 1)))" />
Run Code Online (Sandbox Code Playgroud)
所以,给出以下输入
<a>00012095Kb</a>
Run Code Online (Sandbox Code Playgroud)
然后使用以下XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/a">
<xsl:value-of select="substring-after(., substring-before(., substring(translate(., '0', ''), 1, 1)))" />
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
将输出以下内容
12095Kb
Run Code Online (Sandbox Code Playgroud)