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)?

Foi útil?

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"/>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top