joh.w: XSLT nochmal

Beitrag lesen

Hallo,

hier (http://forum.de.selfhtml.org/archiv/2007/10/t160864/#m1046445) hab ich schon mal nach nem XSLT gefragt wie man Search&Replace auf bestimmte Knoten macht. Hab da draus auch ein bisschen gelernt, aber schnell festgestellt, dass das nicht genug ist.

Das hier ist ein XSLT (leicht abgeändert) was ich bei google gefunden habe:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     version="1.0">
  <xsl:output method="xml" omit-xml-declaration="no"/>

<xsl:template name="globalReplace">
    <xsl:param name="outputString"/>
    <xsl:param name="target"/>
    <xsl:param name="replacement"/>
    xsl:choose
      <xsl:when test="contains($outputString,$target)">

<xsl:value-of select="concat(substring-before($outputString,$target),$replacement)"/>
        <xsl:call-template name="globalReplace">
          <xsl:with-param name="outputString" select="substring-after($outputString,$target)"/>
          <xsl:with-param name="target" select="$target"/>
          <xsl:with-param name="replacement" select="$replacement"/>
        </xsl:call-template>
      </xsl:when>
      xsl:otherwise
        <xsl:value-of select="$outputString"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

<xsl:template match="@*|*|text()">
    <xsl:call-template name="globalReplace">
      <xsl:with-param name="outputString" select="."/>
      <xsl:with-param name="target" select="'cbop'"/>
      <xsl:with-param name="replacement" select="'pidemo'"/>
    </xsl:call-template>
  </xsl:template>

<xsl:template match="@*|*">
    xsl:copy
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

Das hier ist mein Quell-XML:
<?xml version="1.0" encoding="utf-8"?>
<root>
  <Element1>
    <Anydata tag="\cbop\freigabe$"></Anydata>
  </Element1>
  <Element2>
    <Somedata data="\cbop\freigabe$"></Somedata>
  </Element2>
</root>

Und letztlich soll dieses XML dabei der Transformation entstehen:
<?xml version="1.0" encoding="utf-8"?>
<root>
  <Element1>
    <Anydata tag="\pidemo\freigabe$"></Anydata>
  </Element1>
  <Element2>
    <Somedata data="\pidemo\freigabe$"></Somedata>
  </Element2>
</root>

Die Schwierigkeit ist nun, dass das XSLT wie es jetzt vorliegt nur Texte zwischen den Elementen ersetzt. Wie krieg ich es hin, dass das Script jetzt auch Attributswerte ersetzt? Oder viel besser noch: Wie kann man Search & Replace auf das gesamte XML Dokument anwenden?

Hoffe mir hilft da jetzt nochmal ein XSLT-Experte, hab wirklich keinen blassen Dunst mehr wo ich noch mit einer Suche ansetzen soll.

Gruß
joh.w