Foros del Web » Programación para mayores de 30 ;) » Programación General »

Sustituir un string por otro (todas las ocurrencias)

Estas en el tema de Sustituir un string por otro (todas las ocurrencias) en el foro de Programación General en Foros del Web. La función translate de xsl te sustituye un string por otro (bueno no es exactamente eso, pero en esencia es asi), pero sólo te sustitye ...
  #1 (permalink)  
Antiguo 13/05/2004, 04:29
 
Fecha de Ingreso: abril-2004
Ubicación: Sevilla
Mensajes: 100
Antigüedad: 20 años, 6 meses
Puntos: 0
Sustituir un string por otro (todas las ocurrencias)

La función translate de xsl te sustituye un string por otro (bueno no es exactamente eso, pero en esencia es asi), pero sólo te sustitye la primera ocurrencia del string a sustituir, mi pregunta es: ¿se pueden sustituir todas las ocurrencias?¿en el caso de que pueda...como seria??

Muchas gracias por todos
  #2 (permalink)  
Antiguo 13/05/2004, 08:11
 
Fecha de Ingreso: abril-2004
Ubicación: Sevilla
Mensajes: 100
Antigüedad: 20 años, 6 meses
Puntos: 0
Sonrisa Ya lo he solucionao

Supongamos ke el xml es:

<node>
<myfield>
some text[br]dve here[br]dasdfasdf [br]asfasdf[br]
</myfield>
</node>

pues el xsl que transforma lo br en etiquetas <br/> es:

<xsl:template match="node">
<xsl:variable name="str">
<xsl:call-template name="replace">
<xsl:with-param name="str" select="."/>
<xsl:with-param name="repl">[br]</xsl:with-param>
<xsl:with-param name="target">&lt;br/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="$str" disable-output-escaping="yes"/>
</xsl:template>

<xsl:template name="replace">
<xsl:param name="str"/>
<xsl:param name="repl"/>
<xsl:param name="target"/>
<xsl:choose>
<xsl:when test="contains($str,$repl)">
<xsl:call-template name="replace">
<xsl:with-param name="str" select="concat(substring-before($str,$repl),$target,substring-after($str,$repl))"/>
<xsl:with-param name="repl" select="$repl"/>
<xsl:with-param name="target" select="$target"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$str"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>


Ea pal que le pueda servir

  #3 (permalink)  
Antiguo 17/05/2004, 01:45
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 23 años, 1 mes
Puntos: 5
Genial!!

Después de ver esto y conociendo lo cortito que es XSL en cuanto a "funciones" de tratamiento de cadenas, se podría centralizar en un POST funciones útiles como esta implementadas en XSL.

Asi que.... aquí va mi aportación y mensajito reportado a moderadores

split.xsl

Código PHP:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="split">
   <xsl:call-template name="split">
      <xsl:with-param name="string" select="'Foros del Web'" />
      <xsl:with-param name="pattern" select="' '" />
   </xsl:call-template>
</xsl:template>

<xsl:template name="split">
 <xsl:param name="string" />
 <xsl:param name="pattern" />
 <xsl:choose>
      <xsl:when test="contains($string, $pattern)">
           <xsl:if test="not(starts-with($string, $pattern))">
            <xsl:call-template name="split">
                 <xsl:with-param name="string" select="substring-before($string, $pattern)" />
                 <xsl:with-param name="pattern" select="$pattern" />
            </xsl:call-template>
       </xsl:if>
         <xsl:call-template name="split">
            <xsl:with-param name="string" select="substring-after($string, $pattern)" />
            <xsl:with-param name="pattern" select="$pattern" />
       </xsl:call-template>
      </xsl:when>
  <xsl:otherwise>
<xsl:value-of select="$string" /> <br />
  </xsl:otherwise>
 </xsl:choose>
</xsl:template>

</xsl:stylesheet>
split.xml

Código PHP:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml
-stylesheet type="text/xsl" href="split.xsl"?>
<split>

</split>
  #4 (permalink)  
Antiguo 18/06/2004, 13:53
 
Fecha de Ingreso: junio-2004
Mensajes: 43
Antigüedad: 20 años, 5 meses
Puntos: 0
Gracias cabral, te debo una por el post. Y a ti Helbira, gracias también por el interés en ayudarnos.
Un saludo.
  #5 (permalink)  
Antiguo 21/06/2004, 01:14
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 23 años, 1 mes
Puntos: 5
Lo malo que los moderadores no hicieron mucho caso a crear un post con "funciones" útiles escritas en XSL. :(
  #6 (permalink)  
Antiguo 21/06/2004, 13:56
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Las FAQ's y temas similares donde se recopila información útil no parte de los "moderadores" .. En muchos foros se inició por parte de usuarios como UDs. que conocen del tema y empezaron con el "proyecto" .. Los moderadores si vemos ese tipo de mensajes (o se nos comunica) podemos colaborar a su mantención, empezando por colocarlo como "adherido" (importante de antaño) y así colaborar a su difusión ademas de velar por qué se respeten las normas del mensaje en cuestión que tal vez definan UDs. mismos.

Un saludo,
  #7 (permalink)  
Antiguo 16/07/2004, 03:44
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 23 años, 1 mes
Puntos: 5
Exclamación off -topic

Cita:
Iniciado por Cluster
Las FAQ's y temas similares donde se recopila información útil no parte de los "moderadores" .. En muchos foros se inició por parte de usuarios como UDs. que conocen del tema y empezaron con el "proyecto" .. Los moderadores si vemos ese tipo de mensajes (o se nos comunica) podemos colaborar a su mantención, empezando por colocarlo como "adherido" (importante de antaño) y así colaborar a su difusión ademas de velar por qué se respeten las normas del mensaje en cuestión que tal vez definan UDs. mismos.

Un saludo,
TOMA YA! Casi ná!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:24.