xslt 1.0字符串替换函数



我有一个字符串"aa::bb::aa">

并需要将其转入"aa,bb,aa">

我试过

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

但这会返回"aa,,bb,,aa">

这是怎么做到的。

一个非常简单的解决方案(只要字符串值没有空格,它就会起作用(:

translate(normalize-space(translate('aa::bb::cc',':',' ')),' ',',')
  1. 将":"翻译为">
  2. normalize-space()将多个空白字符折叠为一个空格">
  3. 将单个空格"转换为",">

更稳健的解决方案是使用递归模板:

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

您可以使用此

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

示例:tokenize("XPath is fun", "s+")
结果:("XPath"、"is"、"fun"(

相关内容

  • 没有找到相关文章

最新更新