mario: Vertauschen von XML Tags mit XSLT

Hallo allerseits,
ich stehe im Moment vor einem kleinen Problem und zwar möchte ich zwei XML Tags mit Hilfe von XSLT vertauschen. Das ganze soll anhand der id 2er TagElemente geschehen.

Ich habe folgende Source XML:

  
<?xml version="1.0" encoding="UTF-8"?>  
<div id="body" name="body" backgroundColor="grey">  
 <div id="mobMenu2" name="mobMenu2" color="white">  
  <div id="V1" backgroundColor="yellow" color="red" height="50"></div>  
  <div id="O" backgroundColor="yellow" color="red" height="50"></div>  
  <div id="R" backgroundColor="yellow" color="red" height="50"></div>  
  <div id="P" backgroundColor="yellow" color="red" height="50"></div>  
 </div>  
 <div id="spacer1" name="spacer" color="red"></div>  
 <div id="changeLocationDiv" name="changeLocationDiv" color="red" backgroundColor="white"></div>  
 <div id="toggleStaticMap" name="toggleStaticMap" color="green" backgroundColor="white"></div>  
 <div id="spacer0" name="spacer" color="green"></div>  
 <div id="mobMenu" name="mobMenu" color="red" backgroundColor="white">  
  <div id="V2" backgroundColor="green" color="red" height="50"></div>  
  <div id="H" backgroundColor="green" color="red" height="70"></div>  
 </div>  
 <div id="spacer2" name="spacer" color="red"></div>  
 <div id="searchDiv" name="searchDiv" color="red" backgroundColor="white"></div>  
</div>  

Nehmen wir an ich möchte die beiden Div Tags mit den IDs R und P vertauschen, dann würde die Target XML wie folgt aussehen:

  
<?xml version="1.0" encoding="UTF-8"?>  
<div id="body" name="body" backgroundColor="grey">  
 <div id="mobMenu2" name="mobMenu2" color="white">  
  <div id="V1" backgroundColor="yellow" color="red" height="50"></div>  
  <div id="O" backgroundColor="yellow" color="red" height="50"></div>  
  <div id="P" backgroundColor="yellow" color="red" height="50"></div>  
  <div id="R" backgroundColor="yellow" color="red" height="50"></div>  
 </div>  
 <div id="spacer1" name="spacer" color="red"></div>  
 <div id="changeLocationDiv" name="changeLocationDiv" color="red" backgroundColor="white"></div>  
 <div id="toggleStaticMap" name="toggleStaticMap" color="green" backgroundColor="white"></div>  
 <div id="spacer0" name="spacer" color="green"></div>  
 <div id="mobMenu" name="mobMenu" color="red" backgroundColor="white">  
  <div id="V2" backgroundColor="green" color="red" height="50"></div>  
  <div id="H" backgroundColor="green" color="red" height="70"></div>  
 </div>  
 <div id="spacer2" name="spacer" color="red"></div>  
 <div id="searchDiv" name="searchDiv" color="red" backgroundColor="white"></div>  
</div>  

Ich würde das ganze gerne mit dem copy von XSLT machen und anschließend über template-match die Vertauschung vornehmen. Das heisst, das XSLT Template soll wie folgt aussehen und um die Vertauschungsfunktionalität erweitert werden:

  
<?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="node()|@*">  
 <xsl:copy>  
           <xsl:apply-templates select="node()|@*"/>  
        </xsl:copy>  
  </xsl:template>  
  
  <xsl:template match="">  
  
  </xsl:template>  
</xsl:stylesheet>  

Ich kann mir vorstellen, dass man einfach die attribute hin und herkopiert, d.h. mit xsl:attribute arbeitet. Das ist sicherlich nicht die eleganteste Loesung.

Waere nett, wenn mir jemand weiterhelfen konnte!
Danke und Gruss,
mario

  1. Okay, ich habs gerade selbst rausgefunden. trotzdem danke!

      
    <?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="node()|@*">  
     <xsl:copy>  
               <xsl:apply-templates select="node()|@*"/>  
            </xsl:copy>  
      </xsl:template>  
      
      <xsl:template match="//*[@id='P']"><xsl:copy-of select="//*[@id='R']"/></xsl:template>  
      <xsl:template match="//*[@id='R']"><xsl:copy-of select="//*[@id='P']"/></xsl:template>  
    </xsl:stylesheet>