Für die Erweiterbarkeit würde ich die erste Lösung verwenden (die mit dem Knoten children ). Wenn Sie jemals Daten über alle Kinder speichern möchten, haben Sie einen praktischen Knoten, auf dem Sie Attribute platzieren können.
Ich würde es in eine Entität einschließen, um es von den anderen Elementen zu unterscheiden.
Es macht keinen großen Unterschied, ob die Namen der Elemente in der Liste immer gleich sind, denn wenn Sie sie mit XPath oder Linq-to-XML oder was auch immer verarbeiten, dann wird die Abfrage einfach funktionieren ein weiterer Selektor, wenn es einen Wrapper-Knoten gibt, aber ansonsten identisch ist.
Wenn sich andererseits die Elementnamen in der Liste unterscheiden, kann die Verarbeitung der Liste vereinfacht werden, wenn ein Wrapper-Element vorhanden ist, da Sie einfach '*' als Selektor unterhalb des Listenelements verwenden können um alle Elemente zu denen mit einer bestimmten Gruppe von Namen zu filtern.
Es spielt also wahrscheinlich keine große Rolle, aber ich bevorzuge es, ein Wrapper-Element zu verwenden, nur weil es die Elemente in der Sammlung visuell von Elementen abgrenzt, die es nicht sind.
Der erste würde für einfache Listen recht gut funktionieren, aber was wäre, wenn die Liste selbst eine verschachtelte Liste hätte ?! Was wäre, wenn ein Element ein paar verschiedene Listen hätte? Um die Dinge konsistent zu halten, bevorzuge ich ein Element für die Liste und verwende ein <item>
-Tag oder etwas für Kinddaten. Dies hilft bei der Verwendung einer generischen Funktion zum Parsen aller Listen.
Wenn wir eine universelle XML-Repräsentation einer Liste benötigen, kommen wir zu dem Schluss, dass eine Art der folgenden Repräsentation verwendet werden muss:
%Vor%Lassen Sie uns das analysieren :
Das Wrapperelement <_listSomeName>
wird benötigt, weil wir zwei oder mehr Listen als untergeordnete Elemente eines Elements haben und in der Lage sein müssen, jede einzelne Liste eindeutig und bequem zu identifizieren. Der Teil "SomeName" dient dazu, den Namen einer Liste eindeutig zu machen.
Das Element <_listItem>
wird benötigt, um jedes einzelne Listenelement zu umbrechen. Es kann nicht weggelassen werden, da ein Listenelement eine komplexe Struktur haben kann (wie beispielsweise ein XML-Fragment selbst) und es schwierig wäre, es als Ganzes zu identifizieren.
IMHO, es hängt von der Domäne ab.
Für das Beispiel, das Sie angegeben haben, würde ich die Entität verwenden, um die Kinder zu umschließen, weil die Kinder selbst nicht unbedingt Eigenschaften der Person sind, sondern die Liste der Kinder.
Außerdem hilft die Verwendung eines Gehäuses, wenn Sie jemals serialisieren / deserialisieren müssen.