2017-06-06 14 views
-1

Ich habe eine XML-Datei, aus der ich bestimmte untergeordnete Knoten mit Handelsartikel-ID wie childA zum übergeordneten Knoten verschieben/kopieren muss, indem ich einen leeren übergeordneten Knoten erstelle.Verschieben von untergeordneten Knoten zum übergeordneten Knoten unter Bedingung

Wie EingangXML:

<root> 
<Payload> 
     <TradeItemVersion> 
      <TradeItemID>A</TradeItemID> 
      <TradeItemTitle>B</TradeItemTitle> 
      <ProductID>C</ProductID> 
     <TradeItemVersion> 
    <Child> 
      <TradeItemID>ChildA</TradeItemID> 
      <TradeItemTitle>Child</TradeItemTitle> 
      <ProductID>Child</ProductID> 
     <Child> 
<Child> 
      <TradeItemID>ChildB</TradeItemID> 
      <TradeItemTitle>Child</TradeItemTitle> 
      <ProductID>Child</ProductID> 
     <Child> 
<Payload> 
<root> 

Endgültige Ausgabe:

<root> 
<Payload> 
<TradeItemVersion> 
      <TradeItemID>ChildA</TradeItemID> 
      <TradeItemTitle>Child</TradeItemTitle> 
      <ProductID>Child</ProductID> 
     <TradeItemVersion> 
     <TradeItemVersion> 
      <TradeItemID>A</TradeItemID> 
      <TradeItemTitle>B</TradeItemTitle> 
      <ProductID>C</ProductID> 
     <TradeItemVersion> 
<Child> 
      <TradeItemID>ChildB</TradeItemID> 
      <TradeItemTitle>Child</TradeItemTitle> 
      <ProductID>Child</ProductID> 
     <Child> 

<Payload> 
<root> 

konnte ich Kind oben kopieren, aber alle Childs kopiert zu werden, und ich bin nicht in der Lage, bestimmte Kind zu wählen, auch konnte ich nicht neue leere Eltern-Tag erstellen, um Kind in ihm zu setzen.

Mein Code ist unten:

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

<xsl:template match="node()|@*" name="identity"> 
     <xsl:copy> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="TradeItemVersion"> 
     <xsl:apply-templates mode="search"/> 
     <xsl:call-template name="identity"/> 
    </xsl:template> 
    <xsl:template match="Child"/> 
    <xsl:template match="Child" mode="search"> 
     <xsl:call-template name="identity"/> 
    </xsl:template> 
    <xsl:template match="text()" mode="search"/> 


</xsl:stylesheet> 

Bitte vorschlagen.

Antwort

0

Ich habe die Antwort nach vielen Treffern und Versuchen selbst gefunden.

Nach XSL umwandeln würde:

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

<xsl:template match="node()|@*" name="identity"> 
     <xsl:copy> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="TradeItemVersion"> 
     <xsl:apply-templates mode="search"/> 
     <xsl:call-template name="identity"/> 
    </xsl:template> 

<xsl:template match="Child"/> 
    <xsl:template match="Child[contains(TradeItemID,'ChildA')]" mode="search"> 
     <TradeItemVersion> 
<xsl:call-template name="identity"/> 
</TradeItemVersion> 
    </xsl:template> 
    <xsl:template match="text()" mode="search"/> 


</xsl:stylesheet> 

XML-Input-:

<root> 
<Payload> 
     <TradeItemVersion> 
      <TradeItemID>A</TradeItemID> 
      <TradeItemTitle>B</TradeItemTitle> 
      <ProductID>C</ProductID> 

    <Child> 
      <TradeItemID>ChildA</TradeItemID> 
      <TradeItemTitle>Child</TradeItemTitle> 
      <ProductID>Child</ProductID> 
     </Child> 
<Child> 
      <TradeItemID>ChildB</TradeItemID> 
      <TradeItemTitle>Child</TradeItemTitle> 
      <ProductID>Child</ProductID> 
     </Child> 
</TradeItemVersion> 
</Payload> 
</root> 

Output XML:

<root> 
    <Payload> 
    <TradeItemVersion> 
     <Child> 
     <TradeItemID>ChildA</TradeItemID> 
     <TradeItemTitle>Child</TradeItemTitle> 
     <ProductID>Child</ProductID> 
     </Child> 
    </TradeItemVersion> 
    <TradeItemVersion> 
     <TradeItemID>A</TradeItemID> 
     <TradeItemTitle>B</TradeItemTitle> 
     <ProductID>C</ProductID> 
    </TradeItemVersion> 
    </Payload> 
</root> 
Verwandte Themen