2016-04-12 22 views
0

I以下の入力XML有する:移動ノード

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

Iは/ROOT/PQContact/input<folder>/ROOT/AWD下ケースを移動する必要があれば<FOLDERID>の値に<case>一致下<RMEM>タグの値タグ<folder>

私の結果のXMLは以下のようにする必要があります:

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

答えて

1

case要素ルックアップするためにxsl:keyの使用を検討してください。そして、

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

を、あなたはそのfolder要素にマッチするテンプレートを持つことができます既存のノードをコピーしますが、キーを使用して一致するcase要素もコピーします。

<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でこれを組み合わせ、その後、必要とされている唯一のことは AWDがあまりにもコピーされていないことを確認するためのテンプレートです。

<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> 
このXSLTをお試しください
関連する問題