2016-04-12 10 views
0

Ich habe folgende Eingabe xml:Verschieben von Knoten, basierend auf einem passenden Wert

<?xml version="1.0" encoding="UTF-8"?> 
<ROOT> 
    <PQContact> 
     <input> 
     <folder> 
      <UNITCD>CS2XAA</UNITCD> 
      <FOLDERID>KKMTEST3000</FOLDERID> 
     </folder> 
     </input> 
     <input> 
     <folder> 
      <UNITCD>CS2XAA</UNITCD> 
      <FOLDERID>KKMTEST1300</FOLDERID> 
     </folder> 
     </input> 
    </PQContact> 
    <AWD> 
     <case> 
     <RMEM>KKMTEST3000</RMEM> 
     <transaction>ABC</transaction> 
     </case> 
     <case> 
     <RMEM>KKMTEST1300</RMEM> 
     <transaction>DEF</transaction> 
     </case> 
    </AWD> 
</ROOT> 

Ich habe die Fälle unter /ROOT/AWD-<folder> von /ROOT/PQContact/input, wenn der Wert von <RMEM> Tag unter <case> Einstimmungen mit dem Wert von <FOLDERID> zu bewegen Tag unter <folder>.

Mein resultierende xml sollte wie unten sein:

<?xml version="1.0" encoding="UTF-8"?> 
<ROOT> 
    <PQContact> 
     <input> 
     <folder> 
      <UNITCD>CS2XAA</UNITCD> 
      <FOLDERID>KKMTEST3000</FOLDERID> 
      <case> 
       <RMEM>KKMTEST3000</RMEM> 
       <transaction>ABC</transaction> 
      </case> 
     </folder> 
     </input> 
     <input> 
     <folder> 
      <UNITCD>CS2XAA</UNITCD> 
      <FOLDERID>KKMTEST1300</FOLDERID> 
      <case> 
       <RMEM>KKMTEST1300</RMEM> 
       <transaction>DEF</transaction> 
      </case> 
     </folder> 
     </input> 
    </PQContact> 
    <AWD /> 
</ROOT> 

Antwort

1

Betrachten wir ein xsl:key mit den case Elemente zu sehen:

<xsl:key name="case" match="case" use="RMEM" /> 

Dann können Sie eine Vorlage haben, die das folder Element übereinstimmt, kopiert den vorhandenen Knoten, kopiert aber auch das passende Element case mit dem Schlüssel.

<xsl:template match="folder"> 
    <xsl:copy> 
    <xsl:apply-templates select="@*|node()"/> 
    <xsl:apply-templates select="key('case', FOLDERID)" /> 
    </xsl:copy> 
</xsl:template> 

das Kombinieren mit dem XSLT identity template, dann das einzige, was benötigt wird, ist eine Vorlage AWD um sicherzustellen, dass auch nicht kopiert.

Versuchen Sie, diese XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes" /> 
    <xsl:key name="case" match="case" use="RMEM" /> 

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

    <xsl:template match="folder"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
     <xsl:apply-templates select="key('case', FOLDERID)" /> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="AWD" /> 
</xsl:stylesheet> 
Verwandte Themen