amolip: Mit XSL XML Attribute ändern

Beitrag lesen

Hallo Thomas,

Bezogen auf das Beispiel

<root>
  <Element attr="Anytext"/>
</root>

hat der Ansatz funktioniert, hatte ich ja getestet.

Eine kleine Erweiterung des Beispiels zeigt, dass der Ansatz grundsätzlich nichts taugt.
<root>
 <Element attr="Anytext"/>
 <Element attr="Anytext"/>
</root>

Auch dieser Ansatz (sorry) taugt nichts.

<xsl:template match="Element[@attr='Anytext']">
  <Element attr="Sometext"/>
</xsl:template>

Du würgst hier wieder die Identitätstransformation ab, das merkst du, falls der Knoten "Element" Kindknoten hat. Du müsstest hier deswegen noch eine apply-templates Anweisung einbauen, damit es ggf. "weiter geht".
Aber das wäre keineswegs im Sinne des Erfinders. Du sprichst hier den Knoten "Element" an, um den geht es aber gar nicht.

Die Identitätstransformation macht eine eins zu eins Kopie des Quellbaums. Will man nun bestimmte Knoten gesondert behandeln, so nimmt man sie einfach "aus der Identitätstransformation raus" indem man für genau diese Knoten entsprechende Templates definiert (die ja dann eine höhere Priorität haben), worin man dann das Gewünschte umsetzt.
Der Knoten um den es geht, ist nicht der Knoten "root" auch nicht der Knoten "Element", sondern der Knoten »@attr[.='Anytext']«.

Ein entsprechendes Template könnte wie folgt aussehen:

<xsl:template match="@attr[.='Anytext']">
 <xsl:attribute name="attr">Sometext</xsl:attribute>
</xsl:template>

Gruß Uwe