2016-07-19 5 views
1

私の目標は要素タグを特定の場所に移動することです。助けていただければ幸いです。xsltを使用してxml要素グループ(サブ要素を含む)を特定の階層レベルに移動します。

は、ここに私の入力

<?xml version="1.0" encoding="UTF-8"?> 
<ROOT> 
    <CHILD> 
     <C.1>1</C.1> 
     <C.2>something</C.2> 
     <C.3> 
      <A.1>AAA</A.1> 
     </C.3> 
    </CHILD> 
    <CHILD.2> 
     <ANOTHER.1> 
      <ID_1> 
       <PID.1>1</PID.1> 
       <PID.2> 
        <CX.1>18</CX.1> 
        <CX.4> 
         <HD.1>HHH</HD.1> 
        </CX.4> 
        <CX.5>CCC</CX.5> 
       </PID.2> 
      </ID_1> 
      <MOVEME> 
       <ME.1>1</ME.1> 
       <ME.2> 
        <M.1>10</M.1> 
        <M.2>some text string</M.2> 
       </ME.2> 
       <ME.3>MM</ME.3> 
      </MOVEME> 
      <ID_3/> 
     </ANOTHER.1> 
     <ANOTHER.2> 
      <RC> 
       <ORC.1>RR</ORC.1> 
      </RC> 
      <BR> 
       <OBR.1>1</OBR.1> 
       <OBR.2> 
        <EI.1>11</EI.1> 
        <EI.2>EIII</EI.2> 
       </OBR.2> 
      </BR> 
      <BR.1/> 
      <BR.2/> 
     </ANOTHER.2> 
    </CHILD.2> 
    <CHILD.3/> 
</ROOT> 

所望の出力、私はこれまでのところ、それは出力を生成していますが、かなり正しくなかった何

<ROOT> 
    <CHILD>...</CHILD> 
    <CHILD.2> 
     <ANOTHER.1> 
      <ID_1>...</ID_1> 

      //MOVEME IS NOW GONE 
      <ID_3/> 
     </ANOTHER.1> 
     <ANOTHER.2>...</ANOTHER.2> 
    </CHILD.2> 
    <CHILD.3/> 
    //DESTINATION WITH ALL IT ELEMENTS AND CONTENTS 
    <MOVEME> 
     <ME.1>1</ME.1> 
     <ME.2> 
      <M.1>10</M.1> 
      <M.2>some text string</M.2> 
     </ME.2> 
     <ME.3>MM</ME.3> 
    </MOVEME> 
</ROOT> 

です。その特定のタグにも他の要素が含まれています。 ifステートメント内に不要なタグも含めましたが、まだ動作していません。

どうすればよいですか?

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

    <xsl:template match="ROOT/*"> 
     <xsl:for-each select="*"> 
      <xsl:if test="(name() != 'CHILD') and (name() != 'CHILD.2') and (name() != 'CHILD.3') and (name() != 'ANOTHER.2')" > 
       <ZEI> 
         <xsl:apply-templates select="@* | node()"/> 
       </ZEI> 
      </xsl:if> 
     </xsl:for-each> 
    </xsl:template> 
+1

:ここでの考え方は、「移動」、あなたがそれをしたい場所にノードを追加し、それを元の場所にコピーされないようにすることですあなたのXSLTのタグ?あなたの望む出力にそのような要素はありません。 –

+0

ごめんなさい。タグ – user1998820

答えて

0

私はあなたの試みがどこにでも導いているとは思わない。 ` `の目的は何

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"> 
    <xsl:copy> 
     <xsl:apply-templates/> 
     <!-- add it to here --> 
     <xsl:copy-of select="CHILD.2/ANOTHER.1/MOVEME"/> 
    </xsl:copy> 
</xsl:template> 

<!-- remove it from its original place --> 
<xsl:template match="MOVEME"/> 

</xsl:stylesheet> 
+0

ありがとうございます。 – user1998820

関連する問題