如何在LINQ中使用子节点名称获取xml的特定节点

本文关键字:xml 获取 节点 子节点 LINQ | 更新日期: 2024-10-23 11:36:09

我有一个XML文档,如下所示

<A>
  <B>
    <C name="C1" >value1</C>
    <C name="C2">value2</C>
    <C name="C3">value3</C>
    <C name="C4">value4</C>
  </B>
</A>

我想使用节点名称获得一个特定的节点。如何使用LINQ实现这一点。我不太擅长LINQ

如何在LINQ中使用子节点名称获取xml的特定节点

var doc = XDocument.Load(path_to_xml);
var value = (string)doc.Root.Element("B").Elements("C")
                       .FirstOrDefault(c => (string)c.Attribute("name") == "C3");

或者使用XPath

var value = (string)doc.XPathSelectElement("A/B/C[@name='C3']");

Sergey的答案更准确,可读性更强。但是,如果您不关心其他节点,并且如果您只想在具有特定属性的节点上快速地,您也可以使用以下方法:

string value = "";
value = xml.Descendants().Where(x => x.Attribute("name") != null && x.Attribute("name").Value == "C2").FirstOrDefault() != null ?
        xml.Descendants().Where(x => x.Attribute("name") != null && x.Attribute("name").Value == "C2").FirstOrDefault().Value : "";