Вы должны иметь возможность использовать format-number()
без округления ...
Ввод XML
<doc>
<test>0001094125</test>
<test>0000042000</test>
<test>0000040458</test>
<test>0000153800</test>
</doc>
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="test">
<xsl:copy>
<xsl:value-of select="format-number(normalize-space() div 100,'#.00')"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
выход
<doc>
<test>10941.25</test>
<test>420.00</test>
<test>404.58</test>
<test>1538.00</test>
</doc>
Рабочая скрипка: http://xsltfiddle.liberty -development.net / 3NzcBu8 / 1
В качестве альтернативы, вы можете отформатировать число для удаления начальных нулей, а затем вы можете использовать substring () для конкатенации первой части строки, десятичной точки и последней части строки (в зависимости от длины строки).
Пример ...
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="test">
<xsl:copy>
<xsl:variable name="nbr" select="format-number(normalize-space(),'#')"/>
<xsl:variable name="length" select="string-length($nbr)"/>
<xsl:value-of
select="concat(substring($nbr,1,$length - 2),'.',substring($nbr, $length - 1))"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
выход
<doc>
<test>10941.25</test>
<test>420.00</test>
<test>404.58</test>
<test>1538.00</test>
</doc>
Рабочая скрипка: http://xsltfiddle.liberty -development.net / 3NzcBu8