我需要通过其中一个属性的值搜索子节点,例如说我有这个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");
但我没有工作
答案 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']");