2

xslt ファイルに数字を埋め込むために JavaScript を使用しています。しかし、デバッグ時にエラーが発生します。

Clr 型 'ConcatString' を持つ拡張関数パラメーターまたは戻り値はサポートされていません。

どうすればこれを修正できますか?

xslt

<xsl:template name="padNumber">
    <xsl:param name="value"></xsl:param>
    <xsl:param name="length"></xsl:param>
    <xsl:value-of select="user:PadDigits($value,$length)"/>
  </xsl:template>

JavaScript

function PadDigits(n, totalDigits)
{
    n = n.toString();
    var pd = '';
    if (totalDigits &gt; n.length)
    {
        var i;
        for (i=0; i&lt;(totalDigits-n.length); i++)
        {
            pd += '0';
        }
    }
    pd = pd + n.toString();
    return pd;
}
4

3 に答える 3

3

PadDigits を変更して、文字列を返すようにします。

return "" + pd;
于 2012-10-16T15:23:45.320 に答える
2

これには拡張機能はまったく必要ありません。

この純粋な 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
于 2012-10-16T15:26:33.120 に答える
0

@RoManiacありがとうございます。誰かが来て後で見た場合に備えて、私が好むこのテンプレートを見つけました。

<xsl:template name="format-batchnum">
    <xsl:param name="batchnum"/>
    <xsl:param name="numbatchdigit" select="12"/>

    <xsl:choose>
      <xsl:when test="string-length($batchnum)>=$numbatchdigit">
        <xsl:value-of select="$batchnum"/>
      </xsl:when>
      <xsl:otherwise>
        <xsl:text>0</xsl:text>
        <xsl:call-template name="format-batchnum">
          <xsl:with-param name="batchnum" select="$batchnum"/>
          <xsl:with-param name="numbatchdigit" select="$numbatchdigit -1"/>
        </xsl:call-template>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
于 2012-10-16T15:27:00.147 に答える