Prüfen XElement für die Existenz Eines von Mehreren Möglichen XElements
-
05-07-2019 - |
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)?
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"/>