如何搜索具有特定属性值的XElement

本文关键字:属性 XElement 何搜索 搜索 | 更新日期: 2023-09-27 17:53:24

我需要根据它的一个属性的值搜索子节点,例如,我有这个XML

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

我想提取具有属性Name值为2的节点子…我想要完整的节点,而不仅仅是节点的标签。

我试过这样做

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

但我没有工作

如何搜索具有特定属性值的XElement

使用元素名称,即"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")

你可以,如果你想,使用XPath -

实现相同的效果
using System.Xml.XPath;
// ...
XElement result = root.XPathSelectElement("//Child[@Name='2']");