我得到了一个像00000BE0891.116.828
这样的输入。我必须从中删除点和前导零。我尝试使用从中删除点的translate()
函数。
然后我尝试了string(number(00000BE0891.116.828))
,但它返回了NaN
,因为number()
函数不验证字母表。有人有什么建议吗?
一种方法可能是使用翻译删除所有零,然后告诉您第一个非零字符是什么。然后,您可以使用子字符串后以这种方式砍掉前导零。
<xsl:variable name="firstNonZero"
select="substring(translate($number, '0', ''), 1, 1)" />
<xsl:variable name="noLeadingZeroes"
select="concat($firstNonZero, substring-after($number, $firstNonZero))" />
<xsl:value-of select="translate($noLeadingZeroes, '.', '')" />
(其中$number是您的起始输入"00000BE0891.116.828")
或者,如果您想将其组合成一个表达式...
<xsl:value-of
select="translate(concat(substring(translate($number, '0', ''), 1, 1), substring-after($number, substring(translate($number, '0', ''), 1, 1))), '.', '')" />
还可以使用 translate()
从字母数字值中删除前导零。例如,如果您有如下所示的 XML:
<?xml version="1.0" encoding="UTF-8"?>
<data>
<value>00000BE0891.116.828</value>
</data>
您可以使用如下的 XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="value">
<xsl:copy>
<xsl:value-of select="translate(., '^0*', '' )" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
^0*
是一个正则表达式,将删除所有前导零。如果你想与点的平移相结合,你可以这样做:
<xsl:value-of select="translate(translate(., '^0*', ''), '.', '')" />