3

文字列に空白を追加するテンプレートを使用しようとしています。

    <xsl:call-template name="append-pad">
      <xsl:with-param name="padChar" select="' '" />
      <xsl:with-param name="padVar" select="$value" />
      <xsl:with-param name="length" select="15" />
    </xsl:call-template>

<xsl:template name="append-pad">
    <!-- recursive template to left justify and append  -->
    <!-- the value with whatever padChar is passed in   -->
    <xsl:param name="padChar" />
    <xsl:param name="padVar" />
    <xsl:param name="length" />
    <xsl:choose>
      <xsl:when test="string-length($padVar) &lt; $length">
        <xsl:call-template name="append-pad">
          <xsl:with-param name="padChar" select="$padChar" />
          <xsl:with-param name="padVar" select="concat($padVar,$padChar)" />
          <xsl:with-param name="length" select="$length" />
        </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="substring($padVar,1,$length)" />
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

ただし、 with スペースの長さは動的です。これは私が JavaScript で試したものですが、xslt をデバッグしようとすると、「NAME は '' で始めることはできません」というエラーが表示されます。

function firstName(name) {
    try {
        var n = name.toString;
        var target = name.length - 20;
        var whiteString = "";
        for ( i = 0; i < target; i++) {
            whiteString.concat(" ");
        }
        n = n + whiteString;
        return n;
    } catch(err) {
        return "                   ";
    }
}

xsltでこのロジックを実行するにはどうすればよいですか?

    <xsl:value-of  select="concat(substring('                    ', string-length() +1), $firstName)"/>
4

2 に答える 2

3

JavaScriptの例から、常に最大20文字まで文字列を埋めたい場合は、次のように使用できます。

<xsl:value-of select="concat(substring('                    ', string-length($firstName) +1), $firstName)" />

これはどのように作動しますか?

最初に次の式を取ります。substring(' ', string-length($firstName) +1)

これは20スペースの文字列を取り、文字列の一部のみを抽出するためにサブストリングを使用している20 - lengthのと同じスペースの文字列を返します。$firstName

次に、このconcat関数を使用して2つを結合します。スペースのサブストリングを最初に左にパディングします(ただし、右にパディングしたい場合は、いつでも2番目にスペースを置くことができます)。

于 2012-10-01T19:02:56.680 に答える
1

選択では、式を使用する必要があります。パラメータに定数値を設定するには、これを行います

  <xsl:with-param name="padChar"> </xsl:with-param>
  <xsl:with-param name="length">15</xsl:with-param>
于 2012-10-01T18:26:01.890 に答える