代码之家  ›  专栏  ›  技术社区  ›  CLiown

xslt-在小写后加空格,后跟大写字母

  •  6
  • CLiown  · 技术社区  · 15 年前

    我有一个简单的字符串说:

    NiceWeather
    

    我想在E和W之间插入一个空间来生产:

    Nice Weather
    

    我可以使用(xslt 1.0)来放置空间吗?

    2 回复  |  直到 13 年前
        1
  •  1
  •   bastianneu    15 年前

    你要找的通常被称为“字符串拆分”。

    看看这个有用的例子:

    http://www.abbeyworkshop.com/howto/xslt/xslt-split-values/index.html

    小模板:

    http://www.exslt.org/str/functions/split/str.split.template.xsl

        2
  •  6
  •   Technetium    13 年前

    这是对这个问题更直接的回答。巴斯蒂安诺的回答肯定会让你走上正确的道路,但如果你想要一个模板,专门将camecase字符串分解为单个单词,这将为你做到。

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