2012-10-01 124 views
3

我试图使用将空格添加到字符串的模板。在xslt中获取长度

<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> 

但是与空间的长度是动态的。这是我在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)"/> 
+1

从您的JavaScript,我们可以假设字符串+填充的最大长度是20个字符?如果是,那么xslt'concat(substring('',string-length()+1),。)'应该做你想要的。 (其中''是20个空格) – dash

+0

@dash不完全确定你在那里做什么,如果我用20替换'',我将在哪里指定''(空格)是什么被添加? –

+0

这是评论的格式! 'substring('{this实际上是20个空格}',string-length()+ 1)'会产生一串长度为20的空白字符串。然后,您将'concat'放在原始字符串的前面,以提供左侧填充。 – dash

回答

3

如果从你的JavaScript示例,你总是希望垫字符串最多20个字符,那么你可以简单地使用:

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

这是如何工作的?

先取表达式:substring(' ', string-length($firstName) +1)

这将需要20位的串,并返回的空间,是$firstName20 - length,因为我们正在使用子串仅提取字符串的一部分的字符串。

然后,我们使用concat函数将两者结合在一起。我们把空格的子字符串放在左边(尽管如果你想填充的话,我们总是可以把它们放在第二位)。

1

在select中你必须使用一个表达式。 要设置在您的PARAM常量值做

<xsl:with-param name="padChar"> </xsl:with-param> 
    <xsl:with-param name="length">15</xsl:with-param> 
+0

我不使用常数在我的情况 –