Vérification de la présence d'un élément XElement dans l'un des plusieurs éléments XElement possibles

StackOverflow https://stackoverflow.com/questions/1805475

  •  05-07-2019
  •  | 
  •  

Question

Existe-t-il un moyen de déterminer si un XElement contient l'un des éléments spécifiés? Par exemple, je souhaite vérifier les XElements:

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>

J'aimerais pouvoir interroger n'importe lequel des éléments x pour savoir s'ils contiennent les éléments <red/>, <green/> ou <blue/> situés en dessous d'eux et renvoyer true si oui, false sinon.

J'espérais que ce serait plus simple, mais le mieux que je pouvais trouver était:

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

Quelqu'un a-t-il un meilleur moyen de le faire, par exemple, en plaçant ces éléments x de rouge / vert / bleu dans un tableau et en utilisant quelque chose comme Elements.Contains (liste d'éléments)?

Était-ce utile?

La solution

Si je comprends bien - peut-être (avec C #, désolé - mais pas de vraie logique spécifique à C # ici):

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

Même si le VB vous combat, je suis sûr que vous pouvez utiliser .Any au lieu de .SingleOrDefault et une null vérification.

Pour info, utiliser des éléments ici me semble une idée étrange; J'aurais juste le nom de couleur comme texte si possible:

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

ou même en tant qu'attribut:

<somexml color="blue"/>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top