Frage

Gibt es eine Möglichkeit zu bestimmen, ob ein XElement-enthält alle angegebenen Elemente?Für Beispiel, ich haben XElements, dass ich wollen werde, um dies zu überprüfen:

Dim xe1 = <color><blue/></color>
Dim xe2 = <color><red/></color>
Dim xe3 = <color><powderBlue/></color>
Dim xe4 = <color><aqua/></color>
Dim xe5 = <color><green/></color>

Ich möchte in der Lage sein, auf jede Abfrage der xelements, um zu sehen, wenn Sie containt der Elemente <red/>, <green/> oder <blue/> unter Ihnen-und gibt true zurück, wenn dem so ist, false, wenn nicht.

Ich hatte gehofft, es wäre einfacher, aber das beste was ich tun konnte, war:

Dim primaryColor = From e In xe1.Elements Where e.Name = "blue" Or e.Name = "red" Or e.Name = "green"
Dim primaryColorTrue = primaryColor.SingleorDefault
If primaryColorTrue IsNot Nothing Then
'Blah
End If

Hat jemand einen besseren Weg, dies zu tun, wie setzen Sie diese xelements von rot/grün/blau in einem array und mit so etwas wie Elemente.Enthält(Liste der Elemente)?

War es hilfreich?

Lösung

Wenn ich das richtig verstanden habe - vielleicht (mit C#, sorry - aber keine echte C# - spezifische Logik hier):

var colors = new[] {"red", "green","blue"};
bool any = el.Descendants().Any(child => colors.Contains(child.Name.LocalName));

Auch wenn der VB kämpft Sie, ich bin sicher, dass Sie verwenden können .Any statt .SingleOrDefault und eine null überprüfen.

Zur info, mit Elemente hier für mich klingt wie eine seltsame Idee;Ich würde lediglich den Namen der Farbe als die text wenn möglich:

<somexml><color>blue</color></somexml>

oder auch als Attribut:

<somexml color="blue"/>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top