Lire un arbre XML de la structure de façon récursive dans une Liste<T> avec les enfants des listes<T>
J'ai un XML comme ceci:
Et j'ai un Membre de la classe avec le Nom de la propriété.
Comment puis-je lire toutes les unités et tous ses enfants en Parts de plusieurs génériques List<Unit>
qui peuvent avoir à nouveau des enfants List<Unit>
dans un façon récursive en utilisant la dernière .NET de la 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>
Aurais pensé que ce était aussi simple de mise en œuvre de la récursivité que vous pourriez obtenir...
mais le code pour traverser un XDoc/XmlDoc est une sorte de lourd. Il est cependant possible. Je suggère de le remplacer avec un Dictionnaire dans ma réponse.
mais le code pour traverser un XDoc/XmlDoc est une sorte de lourd. Il est cependant possible. Je suggère de le remplacer avec un Dictionnaire dans ma réponse.
OriginalL'auteur msfanboy | 2011-05-28
Vous devez vous connecter pour publier un commentaire.
Ce serait de le faire, à l'aide de la plaine de la récursivité:
OriginalL'auteur BrokenGlass
Le défi serait d'écrire comme 1 requête LINQ, mais c'est au delà de moi. LINQ n'est pas facile/adapté pour la récursivité.
Je vais esquisser une solution, je ne vais pas l'écrire :
class Unit { ... ; ... List<Unit> Children; }
var units = doc.Descendants("Unit");
var Lookup = new Dictionary<XNode, Unit> ();
OriginalL'auteur Henk Holterman
Vous pouvez l'utiliser comme ceci:
OriginalL'auteur svick
Pourquoi ne pas mettre en œuvre un Arbre pour le stockage des unités. Ce serait beaucoup plus facile et plus naturel que les Listes.
Ont un coup d'oeil à ce commentaire pour une bonne mise en œuvre à l'aide de LinkedList.
Voir
Si vous ONT à utiliser la Liste, alors vous pouvez utiliser la récursivité pour le construire. Je suis en supposant que votre Appareil dispose d'une propriété (IList Unité.ChildUnits) pour contenir tous les enfants de la Liste. Si non, vous pouvez encapsuler l'Unité dans une autre classe qui a cette.
dans ce cas, utiliser la récursivité pour mettre tous les nœuds enfants dans une Liste. Je vais mettre à jour la réponse.
OriginalL'auteur YetAnotherUser