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

Yoi*_*iku 3 c# xml xelement search

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

<Root>
    <Child Name="1" foo="a"/>
    <Child Name="2" foo="a"/>
    <Child Name="3" foo="b"/>
    <Child Name="4" foo="c"/>
    <OhterTag/>
</Root>
Run Code Online (Sandbox Code Playgroud)

我想提取属性 Name 值为 2 的节点 Child 。。。我想要完整的节点而不仅仅是节点的标签。

我尝试过这样的事情

root.Elements("Attr").Where(child => child.Attribute("Name").Value == "2");
Run Code Online (Sandbox Code Playgroud)

但我还没有工作

Dmi*_*kin 6

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

root.Elements("Child")
    .Where(child => child.Attribute("Name").Value == "2")
    .First()
Run Code Online (Sandbox Code Playgroud)

...或者你可以只使用谓词.First()

root.Elements("Child")
    .First(child => child.Attribute("Name").Value == "2")
Run Code Online (Sandbox Code Playgroud)

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

root.Elements("Child")
    .FirstOrDefault(child => child.Attribute("Name").Value == "2")
Run Code Online (Sandbox Code Playgroud)