reemplazar tengo una cadena "aa bb :: :: AA"XSLT 1.0 cadena de función
y la necesidad de convertirlo en "AA, BB, AA"
me han tratado
translate(string,':',', ')
pero esto devuelve "aa ,, bb ,, aa"
¿Cómo se puede hacer esto?
reemplazar tengo una cadena "aa bb :: :: AA"XSLT 1.0 cadena de función
y la necesidad de convertirlo en "AA, BB, AA"
me han tratado
translate(string,':',', ')
pero esto devuelve "aa ,, bb ,, aa"
¿Cómo se puede hacer esto?
Una solución muy simple (que funcionará siempre y cuando su valor de cadena no tiene espacios):
translate(normalize-space(translate('aa::bb::cc',':',' ')),' ',',')
normalize-space()
colapso múltiple espacios en blanco caracteres en un solo espacio ""Una solución más robusta sería utilizar un 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>
Usted puede utilizar de esta manera:
<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>
Se puede usar esta
Sintaxis: - fn:tokenize(string,pattern)
Exa mple: tokenize("XPath is fun", "\s+")
Resultado: ("XPath", "is", "fun")
Esta pregunta está etiquetada como XSLT 1.0. Su respuesta requiere XSLT 2.0. –