2012-10-01 100 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

我不使用常數在我的情況 –