2011-09-22 13 views
19

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?

Respuesta

66

Una solución muy simple (que funcionará siempre y cuando su valor de cadena no tiene espacios):

translate(normalize-space(translate('aa::bb::cc',':',' ')),' ',',') 
  1. traducir ":' en ""
  2. normalize-space() colapso múltiple espacios en blanco caracteres en un solo espacio ""
  3. traducir espacios individuales "" en ","

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> 
-1

Se puede usar esta

Sintaxis: - fn:tokenize(string,pattern)

Exa mple: tokenize("XPath is fun", "\s+")
Resultado: ("XPath", "is", "fun")

+2

Esta pregunta está etiquetada como XSLT 1.0. Su respuesta requiere XSLT 2.0. –

Cuestiones relacionadas