2017-01-24 2 views
0

Ich versuche, einen Knoten zu einem anderen Elternknoten zu kopieren und ändern Sie den Stamm der XML-Ausgabe, die ich bekommen werde.XSLT kopieren und ändern Eltern

XML Input:

<root version="2"> 
<address> 
    <id>300000001</id> 
    <name>Test</name> 
    <owner> 
     <code>NWE</code> 
    </owner> 
    <magazin> 
     <id>300000001</id> 
     <kind> 
      <code>JU</code> 
     </kind> 
     <storage> 
      <kinds> 
       <code>JUc</code> 
      </kinds> 
      <capacity>5800</capacity> 
     </storage> 
     <extra> 
      <extra name="nr">22</extra> 
     </extra> 
    </magazin> 
</address> 
</root> 

gewünschte Ausgabe:

<tag> 
<root version="2"> 
    <address> 
     <id>300000001</id> 
     <name>Test</name> 
     <owner> 
      <code>NWE</code> 
     </owner>    
    </address> 
</root> 
<root version="2"> 
    <magazin> 
     <id>300000001</id> 
     <kind> 
      <code>JU</code> 
     </kind> 
     <storage> 
      <kinds> 
       <code>JUc</code> 
      </kinds> 
      <capacity>5800</capacity> 
     </storage> 
     <extra> 
      <extra name="nr">22</extra> 
     </extra> 
    </magazin> 
</root> 
</tag> 

Grundsätzlich möchte ich den Knoten "Magazin" bekommen kopieren Sie sie in einem anderen "root" -Tag, getrennt von der ersten, und plazieren Sie all diese Ausgabe unter dem Tag namens "tag". Mein XSL scheint nur zu kopieren und Im gehofft, dass Sie mir helfen, herauszufinden, was fehlt und wie richtig verwenden ..

Aktuelle XSL:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 
<xsl:template match="magazin"> 
    <root version='2'> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </root> 
</xsl:template> 

Vielen Dank für Ihre Hilfe!

+0

Die Ausgabe, die Sie uns zeigen, ist nicht wohlgeformtes XML (hat mehr als ein Wurzelelement). Bist du sicher, dass du das willst? –

+0

@ michael.hor257k danke, der Code wurde nicht korrekt eingefügt. das root-tag ist "TAG" und es hat 2 elemente "root" -> ich habe es jetzt korrigiert – user3529643

Antwort

1

Versuchen Sie es auf diese Weise:

XSLT 1,0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

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

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

<xsl:template match="magazin"/> 

</xsl:stylesheet> 

Dies kopiert die magazin Knoten in die zweite Kopie des root und unterdrückt von ihr in die erste kopiert wird.

Verwandte Themen