2009-10-14 5 views
6

Büyük harf harf tarafından takip sonra boşluk ekle ki:XSLT - küçük harf basit bir dize var

Nice Weather 
:

NiceWeather 

Ben üretmek için 'e' ve 'W' arasına boşluk eklemek istediğiniz

Alanı açmak için kullanabileceğim bir işlev var mı (XSLT 1.0)?

cevap

6

bu soruya daha doğrudan cevaptır. bastianneu'nun cevabı kesinlikle sizi doğru yola koyar, ancak CamelCase dizelerini özel sözcüklere ayıran bir şablon istiyorsanız, bunu sizin için yapar.

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