2017-05-04 7 views
0

私はフラットなXMLを持っており、一致するすべての要素を1つの要素の下にコピーする必要があります。1つのグループ要素の下で一致する要素をコピーする

入力xmlには、xmlにランダムに表示されるタイトル要素があります。私はそれらを一つの要素の下に置いておきたい。どんな助け?

入力:

<root> 
    <element> 
     <para>Text 11.</para> 
     <para>Text 22.</para> 
    </element> 
    <title number="1"> 
     <title.block>Title1</title.block> 
     <para>Text 33.</para> 
     <para>Text 44.</para> 
    </title> 
    <title number="2"> 
     <title.block>Title2</title.block> 
    </title> 
    <element1> 
     <para>Some Text</para> 
    </element1> 
    <title number="3"> 
     <title.block>Title2</title.block> 
     <para>Text 55.</para> 
    </title> 
    <result> 
     <para>Some Text</para> 
    </result> 
</root> 

所望の出力は次のようになります。

<root> 
    <element> 
     <para>Text 11.</para> 
     <para>Text 22.</para> 
    </element> 
    <title.group> 
    <title number="1"> 
     <title.block>Title1</title.block> 
     <para>Text 33.</para> 
     <para>Text 44.</para> 
    </title> 
    <title number="2"> 
     <title.block>Title2</title.block> 
    </title> 
    <title number="3"> 
     <title.block>Title2</title.block> 
     <para>Text 55.</para> 
    </title> 
    </title.group> 
    <element1> 
     <para>Some Text</para> 
    </element1> 
    <result> 
     <para>Some Text</para> 
    </result> 
</root> 
+1

これまでに試したコードを含めて、間違っていることについて何か言えば、助けを受ける可能性は非常に高いです。 http://stackoverflow.com/help/how-to-askを参照してください。 – BPS

+0

私たちは「宿題をする」サービスではありません。 – sergiol

+0

申し訳ありません。私は別のXPathの組み合わせを試してみましたが、何も私のために働いたので、ここで追加するものはわかりませんでした。しかし、次回は心に留めておきます。ありがとう – user23

答えて

0

単にグループにグループコピータイトルと、以下のすべての兄弟を作成し、最初のtitleのテンプレートを記述します。

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 

    <xsl:output indent="yes"/> 

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

    <xsl:template match="root/title[1]">   
     <title-group> 
      <xsl:copy-of select="., following-sibling::title"/> 
     </title-group> 
    </xsl:template> 

    <xsl:template match="root/title[position() gt 1]"/> 

</xsl:transform> 

http://xsltransform.net/a9Giwu

関連する問題