【问题标题】:Checking an XElement for Existence of One of Several Possible XElements检查 XElement 是否存在几个可能的 XElement 之一
【发布时间】:2009-11-26 20:15:57
【问题描述】:

有没有办法确定 XElement 是否包含任何指定元素之一?例如,我有要检查的 XElement:

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>

我希望能够查询任何 xelement 以查看它们是否包含元素 &lt;red/&gt;&lt;green/&gt;&lt;blue/&gt;,如果是则返回 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(list of elements) 之类的东西?

【问题讨论】:

    标签: linq linq-to-xml xelement


    【解决方案1】:

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

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

    即使 VB 与你作对,我相信你也可以使用 .Any 而不是 .SingleOrDefaultnull 检查。

    对于信息,在我这里使用 elements 听起来很奇怪;如果可能的话,我只是将颜色名称作为 text

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

    甚至作为一个属性:

    <somexml color="blue"/>
    

    【讨论】:

    • 有趣的东西——我不喜欢你原来的答案,所以我编写了一个我认为更好的解决方案,刷新了页面,你和我有同样的解决方案!所以+1。
    • 工作就像一个魅力,谢谢!这是在 VB - Dim colors() = New String() {"green", "blue", "red"} Dim any As Boolean = el.Descendants.Any(Function(e) colors.Contains(e.Name .LocalName))
    • 是的,使用元素的 thing-a-muh-jig 只是查询可能存在或不存在的子元素的示例。 XML 文件不是我的,所以我无法更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 2011-03-22
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    相关资源
    最近更新 更多