有没有办法确定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(元素列表)这样的东西?

有帮助吗?

解决方案

如果我理解正确 - 也许(使用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"/>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top