Pregunta

¿Hay alguna manera de determinar si un XElement contiene uno de los elementos especificados?Por ejemplo, tengo XElements que quiero comprobar:

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>

Me gustaría poder consultar cualquiera de los elementos x para ver si contienen los elementos. <red/>, <green/> o <blue/> debajo de ellos y devuelve verdadero si es así, falso si no.

Esperaba que fuera más simple, pero lo mejor que se me ocurrió fue:

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

¿Alguien tiene una mejor manera de hacer esto, como poner esos elementos x de rojo/verde/azul en una matriz y usar algo como Elements.Contains (lista de elementos)?

¿Fue útil?

Solución

Si entiendo correctamente, tal vez (usando C#, lo siento, pero aquí no hay una lógica específica de C# real):

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

Incluso si VB pelea contigo, estoy seguro de que puedes usar .Any en lugar de .SingleOrDefault y un null controlar.

Para obtener información, utilice elementos Esto me parece una idea extraña;Solo tendría el nombre del color como texto si es posible:

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

o incluso como un atributo:

<somexml color="blue"/>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top