Verificando um XElement para Existência de um dos vários XElements Possíveis
-
05-07-2019 - |
Pergunta
Existe uma maneira de determinar se um XElement contém um dos quaisquer elementos especificados? Por exemplo, eu tenho XElements que eu vou querer verificar:
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>
Eu gostaria de ser capaz de consultar qualquer um dos XElements para ver se eles containt a elementos <red/>
, <green/>
ou <blue/>
abaixo deles e retornar true se assim for, false se não.
Eu estava esperando que seria simplier, mas o melhor que eu poderia vir acima com 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
Alguém tem uma maneira melhor de fazer isso, como colocar essas XElements de algo vermelho / verde / azul em uma matriz e utilizando como Elements.Contains (lista de elementos)?
Solução
Se bem entendi - talvez (usando C #, desculpe - mas nenhuma lógica real específica C # aqui):
var colors = new[] {"red", "green","blue"};
bool any = el.Descendants().Any(child => colors.Contains(child.Name.LocalName));
Mesmo que as lutas VB você, eu tenho certeza que você pode usar .Any
vez de .SingleOrDefault
e um cheque null
.
Para informações, usando elementos aqui para me soa como uma idéia estranha; Eu tinha acabado de ter o nome da cor como o texto , se possível:
<somexml><color>blue</color></somexml>
ou até mesmo como um atributo:
<somexml color="blue"/>