これには拡張機能はまったく必要ありません。
この純粋な 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