xslt 1.0stringreplace函数

我有一个string“aa :: bb :: aa”

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

我努力了

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

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

如何才能做到这一点。

一个非常简单的解决scheme(只要你的string值没有空格就可以工作):

 translate(normalize-space(translate('aa::bb::cc',':',' ')),' ',',') 
  1. 翻译成 ” ”
  2. normalize-space()将多个空白字符合并为一个空格“”
  3. 将单个空格翻译成“”,

更健壮的解决scheme是使用recursion模板 :

 <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”,“是”,“有趣”)