2016-04-12 30 views
0

Aşağıdaki giriş xml:Hareketli düğümleri

<?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> 

Ben /ROOT/PQContact/input ait <folder> için /ROOT/AWD altında davaları taşımak zorunda olmadığını <FOLDERID> değeriyle <case> eşleşmeler altında <RMEM> etiketinin değeri etiketi <folder> altında.

My çıkan xml aşağıdaki gibi olmalıdır:

<?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> 

cevap

1

case unsurları aramak için bir xsl:key kullanmayı düşünün: Sonra

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

, sen folder elemanı ile eşleşen bir şablon sahip olabileceğini Varolan düğümü kopyalar, ancak aynı zamanda anahtar kullanarak eşleşen case öğesini kopyalar.

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

XSLT identity template ile birleştirin, daha sonra ihtiyaç duyulan tek şey AWD çok kopyalanmaz emin olmak için bir şablondur.

bu XSLT deneyin

<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>