2016-06-10 24 views
0

Ich habe versucht, einige verschiedene Möglichkeiten, alle untergeordneten Knoten zu übergeordneten Großeltern zu übertragen, Musterübereinstimmung findet nur mit einem untergeordneten Knoten statt, aber nicht rekursiv. Schätze jede Hilfe hier.Wie untergeordnete Knoten zusammen mit Werten zum übergeordneten Knoten übertragen

<grandparent1> 
    <parent1> 
     <child1>1</child1> 
     <child2>2</child2> 
    </parent2> 
</grandparent1> 

Sollte variiert

<grandparent1> 
    <child1>1</child1> 
    <child2>2</child2> 
</grandparent1> 

Größe der untergeordneten Knoten werden. Schätzen Sie alle Hilfe hier

+0

In welcher Sprache programmieren Sie? Wenn es einen Code gibt, können Sie das bereitstellen? BTW, Sie haben an der Spitze während unten. – FLICKER

+0

http://stackoverflow.com/help/someone-answers –

Antwort

0

Dies ist sehr einfach mit XSLT rekursiven processing model zu tun.

Verwenden Sie zuerst die Identität Template Transformation rekursiv alles kopieren als ist. Fügen Sie dann eine Ausnahme für die übergeordneten Knoten hinzu und veranlassen Sie, dass sie die Rekursion fortsetzen, ohne sich selbst zu kopieren.

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="parent1 | parent2"> 
    <xsl:apply-templates/> 
</xsl:template> 

</xsl:stylesheet> 

Um dies für alle Eltern Generika zu machen (dh 2. Ebene) Knoten, ohne seinen Namen im Voraus zu wissen, könnten Sie verwenden:

<xsl:template match="/*/*"> 
    <xsl:apply-templates/> 
</xsl:template> 

als zweite Vorlage.