Wöss Reini: Zeichenketten ersetzen

Hallo,

ich würde gerne in einer XSL Datei Zeichenketten ersetzen. Leider kenn ich nur die Funktion translate, welche aber nur einzelne Zeichen ersetzt.

Beispiel:
transleteNeu('(pid=312)(pid=313)(pid=314)', ')(', ') or (')
soll die Zeichenkette (pid=312)(pid=313)(pid=314)
zur Zeichenkette (pid=312) or (pid=313) or (pid=314) umwandeln.

Ist sowas in XSL möglich?

lg
Reini

  1. ich würde gerne in einer XSL Datei Zeichenketten ersetzen. Leider kenn ich nur die Funktion translate, welche aber nur einzelne Zeichen ersetzt.

    Sowas macht man zum Beispiel mit rekursiven Templates:

    <xsl:template name="replace">
     <xsl:param name="sourcestring"/>
     <xsl:param name="toreplacestring"/>
     <xsl:param name="targetstring"/>
     <xsl:variable name="tmp">
      xsl:choose
       <xsl:when test="contains($sourcestring,$toreplacestring)">
        <xsl:value-of select="concat(substring-before($sourcestring,$toreplacestring),$targetstring,substring-after($sourcestring,$toreplacestring))"/>
       </xsl:when>
       xsl:otherwise<xsl:value-of select="$sourcestring" /></xsl:otherwise>
      </xsl:choose>
     </xsl:variable>

    xsl:choose
      <xsl:when test="contains($tmp,$toreplacestring)"><xsl:call-template name="replace"><xsl:with-param name="sourcestring" select="$tmp"/><xsl:with-param name="toreplacestring" select="$toreplacestring"/><xsl:with-param name="targetstring" select="$targetstring"/></xsl:call-template></xsl:when>
      xsl:otherwise<xsl:value-of select="$tmp"/></xsl:otherwise>
     </xsl:choose>
    </xsl:template>