xslt 1.0字符串替换函数

时间:2011-09-22 20:04:22

标签: xslt xslt-1.0

我有一个字符串“aa :: bb :: aa”

并需要将其转为“aa,bb,aa”

我试过了

translate(string,':',', ')

但这会返回“aa ,, bb ,, aa”

如何做到这一点。

2 个答案:

答案 0 :(得分:67)

一个非常简单的解决方案(只要您的字符串值没有空格就可以使用):

translate(normalize-space(translate('aa::bb::cc',':',' ')),' ',',')
  1. 将“:”翻译成“”
  2. normalize-space()将多个空格字符折叠为单个空格“”
  3. 将单个空格“”翻译成“,”
  4. 更强大的解决方案是使用recursive template

    <xsl:template name="replace-string">
        <xsl:param name="text"/>
        <xsl:param name="replace"/>
        <xsl:param name="with"/>
        <xsl:choose>
          <xsl:when test="contains($text,$replace)">
            <xsl:value-of select="substring-before($text,$replace)"/>
            <xsl:value-of select="$with"/>
            <xsl:call-template name="replace-string">
              <xsl:with-param name="text"
    select="substring-after($text,$replace)"/>
              <xsl:with-param name="replace" select="$replace"/>
              <xsl:with-param name="with" select="$with"/>
            </xsl:call-template>
          </xsl:when>
          <xsl:otherwise>
            <xsl:value-of select="$text"/>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:template>
    

    您可以像这样使用它:

    <xsl:call-template name="replace-string">
      <xsl:with-param name="text" select="'aa::bb::cc'"/>
      <xsl:with-param name="replace" select="'::'" />
      <xsl:with-param name="with" select="','"/>
    </xsl:call-template>
    

答案 1 :(得分:-1)

您可以使用此

语法: - fn:tokenize(string,pattern)

示例:tokenize("XPath is fun", "\s+")
结果:(&#34; XPath&#34;,&#34;是&#34;,&#34;有趣&#34;)