如何使用特定属性值搜索XElement?

时间:2014-03-25 17:02:38

标签: c# xml search xelement

我需要通过其中一个属性的值搜索子节点,例如说我有这个XML

<Root>
    <Child Name="1" foo="a"/>
    <Child Name="2" foo="a"/>
    <Child Name="3" foo="b"/>
    <Child Name="4" foo="c"/>
    <OhterTag/>
</Root>

我想提取具有值为2的属性Name的节点Child。 。 。我希望整个节点不仅仅是节点的标签。

我尝试过这样的事情

root.Elements("Attr").Where(child => child.Attribute("Name").Value == "2");

但我没有工作

2 个答案:

答案 0 :(得分:4)

使用元素名称,即“Child”,它应该按照你的方式工作......并且由于.Where在这种情况下会返回IEnumerable<XElement>,为了获得该元素,请使用.First()最后。

root.Elements("Child")
    .Where(child => child.Attribute("Name").Value == "2")
    .First()

...或者您可以将谓词与.First()

一起使用
root.Elements("Child")
    .First(child => child.Attribute("Name").Value == "2")

最后,如果节点不存在,您可以使用.FirstOrDefault(),以避免空引用异常,如@HamletHakobyan建议的以下评论中的讨论

root.Elements("Child")
    .FirstOrDefault(child => child.Attribute("Name").Value == "2")

答案 1 :(得分:1)

你可以,如果你想,使用XPath实现相同的目标 -

using System.Xml.XPath;

// ...

XElement result = root.XPathSelectElement("//Child[@Name='2']");
相关问题