如何搜索具有特定属性值的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");
但我没有工作
使用元素名称,即"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']");