xslt 1.0stringreplace函数
我有一个string“aa :: bb :: aa”
并需要将其转换为“aa,bb,aa”
我努力了
translate(string,':',', ')
但是这返回“aa ,, bb ,, aa”
如何才能做到这一点。
一个非常简单的解决scheme(只要你的string值没有空格就可以工作):
translate(normalize-space(translate('aa::bb::cc',':',' ')),' ',',')
- 翻译成 ” ”
-
normalize-space()
将多个空白字符合并为一个空格“” - 将单个空格翻译成“”,
更健壮的解决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”,“是”,“有趣”)