Lesen einer XML-Baumstruktur rekursiv in ein List<T> mit Kinder-Listen<T>
Habe ich eine XML wie diese:
Und ich habe eine Member-Klasse mit den Namen der Eigenschaft.
Wie kann ich Lesen Sie jedes Gerät und seine Kinder-Einheiten, die in mehrere generische List<Unit>
haben wieder Kinder List<Unit>
in einer Weise rekursiv unter Verwendung der neuesten .NET-Technologie ?
<Root>
<Units Name="Test1">
<Unit Name="Test11" />
<Unit Name="Test12">
<Unit Name="Test21" />
<Unit Name="Test22" />
<Unit Name="Test23">
<Unit Name="Test31" />
<Unit Name="Test32" />
<Unit Name="Test33" />
</Unit>
<Unit Name="Test24" />
</Unit>
</Units>
<Units Name="Test2" />
<!-- ... -->
<Units Name="Test3" />
<!-- ... -->
<Units Name="Test4" />
</Root>
- Hätte gedacht, diese wurde als straight-forward Implementierung der Rekursion, wie Sie bekommen könnte...
- aber der code für das Durchlaufen einer XDoc/XmlDoc ist irgendwie unhandlich. Es ist möglich, obwohl. Ich schlage vor, ersetzen Sie es mit einem Wörterbuch in meiner Antwort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser würde es tun, mit einfachen Rekursion:
Die Herausforderung wäre, es zu schreiben, als 1 LINQ-Abfrage, aber das ist mir ein Rätsel. LINQ ist nicht einfach/geeignet für Rekursion.
Werde ich skizzieren Sie eine Lösung, ich werde nicht schreiben Sie es auf :
class Unit { ... ; ... List<Unit> Children; }
var units = doc.Descendants("Unit");
var Lookup = new Dictionary<XNode, Unit> ();
Können Sie es verwenden, wie diese:
Nicht warum implementieren Sie eine Struktur für die Speicherung von Einheiten. Das wäre doch viel einfacher und natürlicher als Listen.
Haben Sie einen Blick auf dieser Kommentar für eine gute Umsetzung mit LinkedList.
Sehen
Wenn Sie HABEN Verwendung Liste, dann können Sie Rekursion, um es zu bauen. Ich nehme an, Ihr Gerät hat die Eigenschaft (IList-Einheit.ChildUnits) halten alle Kinder-Liste. Wenn nicht, können Sie wollen, wrap-Einheit in eine andere Klasse, die hat dieses.