Es fällt mir schwer, eine XSLT zu schreiben, um alle Knoten mit demselben Attributwert auf die gleiche Ebene zu verschieben.Eine verschachtelte XML mit XSLT glätten
Hier ist ein Beispiel:
<root>
<object Name="1">
<Property Name="a1" Value="a">
<Property Name="a1.1" Value="a"/>
<Property Name="a1.2" Value="a">
<Property Name="a1.2.1" Value="a"/>
<Property Name="a1.2.2" Value="a"/>
</Property>
</Property>
<Property Name="b1" Value="b"/>
</object>
</root>
Derzeit ist es möglich, zu nisten Eigenschaften mit dem Wert ein ineinander (es gibt keine Grenze für die Menge von Knoten oder Verschachtelungsebene). Dieses Modell wird geändert, um diesen Eigenschaftstyp nur auf Objektebene zuzulassen. die wie folgt nach der Transformation (die Reihenfolge der Elemente spielt keine Rolle) aussehen sollte:
<root>
<object Name="1">
<Property Name="a1" Value="a"/>
<Property Name="a1.1" Value="a"/>
<Property Name="a1.2" Value="a">
<Property Name="a1.2.1" Value="a"/>
<Property Name="a1.2.2" Value="a"/>
<Property Name="b1" Value="b"/>
</object>
</root>
Ich habe versucht, diese Lösung in dem Beispiel ist der Hauptunterschied, dass der Knoten mit this very similar question, wird nicht kopiert werden, aber seine Werte werden verwendet. Ich konnte jedoch nicht herausfinden, wie man den gesamten Knoten kopiert.
BEARBEITEN
Das obige Beispiel ist über vereinfacht. Die Eigenschaften werden Unterelemente enthalten, die auch kopiert werden müssen
<root>
<object Name="1">
<Property Name="a1" Value="a">
<x>x1</x>
<y>y1</y>
<z>z1</z>
<Property Name="a1.1" Value="a">
<x>x1.1</x>
<y>y1.1</y>
<z>z1.1</z>
</Property>
<Property Name="a1.2" Value="a">
<x>x1.2</x>
<y>y1.2</y>
<z>z1.2</z>
<Property Name="a1.2.1" Value="a">
<x>x1.2.1</x>
<y>y1.2.1</y>
<z>z1.2.1</z>
</Property>
<Property Name="a1.2.2" Value="a">
<x>x1.2.1</x>
<y>y1.2.1</y>
<z>z1.2.1</z>
</Property>
</Property>
</Property>
<Property Name="b1" Value="b"/>
</object>
</root>
dies nach der Transformation werden sollte:
<root>
<object Name="1">
<Property Name="a1" Value="a">
<x>x1</x>
<y>y1</y>
<z>z1</z>
</Property>
<Property Name="a1.1" Value="a">
<x>x1.1</x>
<y>y1.1</y>
<z>z1.1</z>
</Property>
<Property Name="a1.2" Value="a">
<x>x1.2</x>
<y>y1.2</y>
<z>z1.2</z>
</Property>
<Property Name="a1.2.1" Value="a">
<x>x1.2.1</x>
<y>y1.2.1</y>
<z>z1.2.1</z>
</Property>
<Property Name="a1.2.2" Value="a">
<x>x1.2.1</x>
<y>y1.2.1</y>
<z>z1.2.1</z>
</Property>
<Property Name="b1" Value="b"/>
</object>
</root>
Vielen Dank für Ihre Hilfe. Ich hatte das Beispiel vereinfacht (ich habe meine Frage bearbeitet). Die zu kopierenden Knoten enthalten auch andere untergeordnete Knoten als die Eigenschaften, die mitkopiert werden müssen. Mit Ihrem XSLT verlieren die Eigenschaftsknoten ihren Inhalt. – Philippe