xslt 1.0 字符串替换功能

Posted

技术标签:

【中文标题】xslt 1.0 字符串替换功能【英文标题】:xslt 1.0 string replace function 【发布时间】:2011-11-23 03:51:34 【问题描述】:

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

需要转成“aa, bb, aa”

我试过了

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

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

如何做到这一点。

【问题讨论】:

【参考方案1】:

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

translate(normalize-space(translate('aa::bb::cc',':',' ')),' ',',')
    将“:”翻译成“” normalize-space() 将多个空白字符折叠成一个空格“” 将单个空格“”翻译成“,”

更强大的解决方案是使用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>

【讨论】:

【参考方案2】:

你可以用这个

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

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

【讨论】:

这个问题被标记为 XSLT 1.0。您的答案需要 XSLT 2.0。

以上是关于xslt 1.0 字符串替换功能的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 XSLT 替换 XML 节点名称中的字符 - 更改根元素

xslt 2.0 替换为 xml 结构

XSLT 字符串替换

使用 XSLT 以字符串替换的形式对 HTML 文档应用编辑

XSLT 2.0 - 如何用字符串替换'('和')'来清空?

XSLT 替换属性值和文本节点中的文本