您根本不需要扩展功能。
使用这个纯 XSLT 实现:
<xsl:template name="padNumber">
<xsl:param name="pValue"/>
<xsl:param name="pLength"/>
<xsl:value-of select=
"concat(substring(substring($vZeroes,1,$pLength),
string-length($pValue) +1),
$pValue)
"/>
</xsl:template>
这是一个完整的例子:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:variable name="vZeroes" select=
"'000000000000000000000000000000000000000'"/>
<xsl:template match="/">
<xsl:call-template name="padNumber">
<xsl:with-param name="pValue" select="12345"/>
<xsl:with-param name="pLength" select="8"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="padNumber">
<xsl:param name="pValue"/>
<xsl:param name="pLength"/>
<xsl:value-of select=
"concat(substring(substring($vZeroes,1,$pLength),
string-length($pValue) +1),
$pValue)
"/>
</xsl:template>
</xsl:stylesheet>
当将此转换应用于任何 XML 文档(本演示中未使用)时,将产生所需的正确结果:
00012345
您可以进一步参数化要使用的所需填充字符:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:variable name="vZeroes" select=
"'000000000000000000000000000000000000000'"/>
<xsl:template match="/">
<xsl:call-template name="padNumber">
<xsl:with-param name="pValue" select="12345"/>
<xsl:with-param name="pLength" select="8"/>
<xsl:with-param name="pPadChar" select="'*'"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="padNumber">
<xsl:param name="pValue"/>
<xsl:param name="pLength"/>
<xsl:param name="pPadChar" select="'0'"/>
<xsl:variable name="vZeroes" select="translate($vZeroes, '0', $pPadChar)"/>
<xsl:value-of select=
"concat(substring(substring($vZeroes,1,$pLength),
string-length($pValue) +1),
$pValue)
"/>
</xsl:template>
</xsl:stylesheet>
执行此转换时,现在的结果是:
***12345