检查XElement是否存在几个可能的XElements之一

时间:2009-11-26 20:15:57

标签: linq linq-to-xml xelement

有没有办法确定XElement是否包含任何指定元素之一?例如,我有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>

我希望能够查询任何xelements,看看它们是否包含它们下面的元素<red/><green/><blue/>,如果是,则返回true,如果是,则返回false不

我希望它会更简单,但我能想到的最好的是:

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

有没有人有更好的方法来做到这一点,例如将红色/绿色/蓝色的xelements放入数组并使用像Elements.Contains(元素列表)之类的东西?

1 个答案:

答案 0 :(得分:2)

如果我理解正确 - 也许(使用C#,抱歉 - 但这里没有真正的C#特定逻辑):

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

即使VB与你对抗,我也相信你可以使用.Any代替.SingleOrDefaultnull支票。

有关信息,在我这里使用元素听起来有点奇怪;如果可能,我只是将颜色名称作为文本

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

或甚至作为属性:

<somexml color="blue"/>