Verifica di un XElement per l'esistenza di uno dei numerosi possibili XElement
-
05-07-2019 - |
Domanda
C'è un modo per determinare se un XElement contiene uno degli elementi specificati? Ad esempio, ho XElements che vorrò controllare:
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>
Mi piacerebbe essere in grado di eseguire una query su uno degli elementi x per vedere se contengono gli elementi <red/>
, <green/>
o <blue/>
al di sotto di essi e restituire true in caso affermativo, false in caso contrario.
Speravo che sarebbe stato più semplice, ma il meglio che potevo inventare era:
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
Qualcuno ha un modo migliore per farlo, come mettere quegli elementi di rosso / verde / blu in un array e usare qualcosa come Elements.Contains (elenco di elementi)?
Soluzione
Se capisco correttamente - forse (usando C #, scusa - ma non c'è una vera logica specifica C # qui):
var colors = new[] {"red", "green","blue"};
bool any = el.Descendants().Any(child => colors.Contains(child.Name.LocalName));
Anche se il VB ti combatte, sono sicuro che puoi usare .Any
invece di .SingleOrDefault
e un null
controllo.
Per informazioni, usare elementi qui per me sembra un'idea strana; Avrei solo il nome del colore come testo se possibile:
<somexml><color>blue</color></somexml>
o anche come attributo:
<somexml color="blue"/>