2009-09-30 193 views
2

我創建一個左裝飾模板,我有這個下面的模板:左修剪空白XSLT 1.0

<xsl:template name="str:left-trim"> 
    <xsl:param name="string" select="''"/> 
    <xsl:variable name="tmp" select="substring($string, 1, 1)"/> 

    <xsl:if test="$tmp = ' '"> 
     <xsl:variable name="tmp2" select="substring-after($string, $tmp)"/> 
     <xsl:choose> 
      <xsl:when test="$tmp2 != ''"> 
       <xsl:call-template name="str:left-trim"> 
        <xsl:with-param name="string" select="$tmp2"/>   
       </xsl:call-template> 
      </xsl:when> 
      <xsl:otherwise> 
       <xsl:value-of select="$tmp2"/> 
      </xsl:otherwise> 
     </xsl:choose> 
    </xsl:if> 
    <xsl:if test="$tmp != ' '"> 
     <xsl:value-of select="$string"/> 
    </xsl:if> 
</xsl:template> 

如果我通過這樣一個說法:

<xsl:variable name="str-test2">this is a america</xsl:variable> 

然後我的模板將工作很好,但如果我傳遞下面這樣的參數,我的模板將失敗。我認爲中斷有問題(換行符)

<xsl:variable name="str-test2">    
     this is a america 
    </xsl:variable> 

你有什麼建議嗎?

回答

4

這對我有用。注意我沒有使用str:命名空間以及我正在檢查主要的換行符。

<xsl:template name="left-trim"> 
    <xsl:param name="string" select="''"/> 
    <xsl:variable name="tmp" select="substring($string, 1, 1)"/> 

    <xsl:choose> 
    <xsl:when test="$tmp = ' ' or $tmp = '&#xA;'"> 
     <xsl:call-template name="left-trim"> 
     <xsl:with-param name="string" select="substring-after($string, $tmp)"/>   
     </xsl:call-template> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:value-of select="$string"/> 
    </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 

HTH,Axel。

1

這裏有一個解決方案,以左修剪在XSLT 1.0字符串不使用遞歸模板:

<xsl:value-of select="substring($str-test2, string-length(substring-before($str-test2, substring(normalize-space($str-test2), 1, 1))) + 1)"/>