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函数将两者连接在一起。我们将空格子串放在第一个填充左侧(尽管如果您想填充右侧,我们总是可以将它们放在第二个)。

于 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 回答