2009-10-14 122 views

回答

6

這裏是一個更直接的回答這個問題。 bastianneu的回答絕對會讓你走上正軌,但如果你想要一個能夠將CamelCase字符串分解成單個單詞的模板,這將爲你做到。

<xsl:template name="breakIntoWords"> 
    <xsl:param name="string" /> 
    <xsl:choose> 
    <xsl:when test="string-length($string) &lt; 2"> 
     <xsl:value-of select="$string" /> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:call-template name="breakIntoWordsHelper"> 
     <xsl:with-param name="string" select="$string" /> 
     <xsl:with-param name="token" select="substring($string, 1, 1)" /> 
     </xsl:call-template> 
    </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 

<xsl:template name="breakIntoWordsHelper"> 
    <xsl:param name="string" select="''" /> 
    <xsl:param name="token" select="''" /> 
    <xsl:choose> 
    <xsl:when test="string-length($string) = 0" /> 
    <xsl:when test="string-length($token) = 0" /> 
    <xsl:when test="string-length($string) = string-length($token)"> 
     <xsl:value-of select="$token" /> 
    </xsl:when> 
    <xsl:when test="contains('ABCDEFGHIJKLMNOPQRSTUVWXYZ',substring($string, string-length($token) + 1, 1))"> 
     <xsl:value-of select="concat($token, ' ')" /> 
     <xsl:call-template name="breakIntoWordsHelper"> 
     <xsl:with-param name="string" select="substring-after($string, $token)" /> 
     <xsl:with-param name="token" select="substring($string, string-length($token), 1)" /> 
     </xsl:call-template> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:call-template name="breakIntoWordsHelper"> 
     <xsl:with-param name="string" select="$string" /> 
     <xsl:with-param name="token" select="substring($string, 1, string-length($token) + 1)" /> 
     </xsl:call-template> 
    </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 
相關問題