如何在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
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 : "";