ThomasM: Mit XSL XML Attribute ändern

Beitrag lesen

Hallo Uwe,

dein Template ergibt in Bezug auf die Fragestellung und in Verbindung mit der Identitätstransformation keinerlei Sinn. Dein Template ist nicht nur falsch formuliert, sondern kontraproduktiv, da es die Identitätstransformation "abwürgt". Was aber sogar ein Glücksfall ist, da sonst (abgesehen davon ebenfalls) alles andere als das gewünschte Ergebnis herauskommen würde.

Bezogen auf das Beispiel

<?xml version="1.0" encoding="ISO-8859-1"?>  
<root>  
  <Element attr="Anytext"/>  
</root>

hat der Ansatz funktioniert, hatte ich ja getestet.

Besonders allgemeingültig war das doch nicht, soweit gebe ich Dir Recht. Diese Formulierung trifft es eher:

<?xml version="1.0" encoding="UTF-8"?>  
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
<xsl:output method="xml" version="1.0" encoding="ISO-8859-1"/>  
  
<xsl:template match="@* | node()">  
  <xsl:copy>  
    <xsl:apply-templates select="@* | node()"/>  
  </xsl:copy>  
</xsl:template>  
  
<xsl:template match="Element[@attr='Anytext']">  
  <Element attr="Sometext"/>  
</xsl:template>  
  
</xsl:stylesheet>

Hier fehlt lediglich der ursprüngliche root-Bezug im zweiten Template.

Ein Dokument dieser Art lässt sich damit durchaus behandeln:

<?xml version="1.0" encoding="ISO-8859-1"?>  
<root>  
  <Element attr="Anytext"/>  
  <x>Test</x>  
  <Element attr="Anytext"/>  
  <x>  
    <y>Test</y>  
    <z>  
      <Element attr="Anytext"/>  
    </z>  
  </x>  
  <hallo>  
    <blub>123</blub>  
  </hallo>  
  <Element attr="Anytext"/>  
</root>

mit dem Ergebnis:

<?xml version="1.0" encoding="ISO-8859-1"?>  
<root>  
  <Element attr="Sometext" />  
  <x>Test</x>  
  <Element attr="Sometext" />  
  <x>  
    <y>Test</y>  
    <z>  
      <Element attr="Sometext" />  
    </z>  
  </x>  
  <hallo>  
    <blub>123</blub>  
  </hallo>  
  <Element attr="Sometext" />  
</root>

Grüße,
Thomas