文字列「aa :: bb :: aa」があります
「aa、bb、aa」に変換する必要があります
私が試してみました
translate(string,':',', ')
しかし、これは「aa , bb , aa」を返します
どのようにこれを行うことができます。
非常に簡単な解決策(文字列値にスペースが含まれない限り機能します):
_translate(normalize-space(translate('aa::bb::cc',':',' ')),' ',',')
_
normalize-space()
は、複数の空白文字を単一のスペース ""に折りたたみますより堅牢なソリューションは、 再帰テンプレート :を使用することです
_<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>
_