2017-05-04 1 views
0

Ich habe eine flache xml und ich muss alle übereinstimmenden Elemente unter einem Element kopieren.Kopieren Sie die übereinstimmenden Elemente unter einem Gruppenelement

In Eingabe-XML gibt es Titelelemente, die zufällig in XML angezeigt werden können. Ich möchte sie unter ein Element setzen. Irgendeine Hilfe?

Input:

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

gewünschte Ausgabe ist:

<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

Sie werden viel eher Hilfe erhalten, wenn Sie den Code, den Sie bisher versucht haben, einbeziehen und etwas darüber sagen, was es falsch macht. Siehe http://stackoverflow.com/help/how-to-ask. – BPS

+0

Wir sind kein "mache meine Hausaufgaben" -Service. – sergiol

+0

Entschuldigung. Ich habe verschiedene XPath-Kombinationen ausprobiert, aber nichts funktionierte für mich, also wusste ich nicht, welchen ich hier hinzufügen sollte. Aber wird beim nächsten Mal im Hinterkopf behalten. Vielen Dank – user23

Antwort

0

einfach eine Vorlage für das erste title schreiben, die die Gruppe und Kopien, die Titel und alle folgenden Geschwister in die Gruppe erzeugt:

<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

Verwandte Themen