繁体   English   中英

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

[英]How to get a specif node of an xml using child node name in LINQ

我有一个如下所示的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']");

谢尔盖的答案更加准确和可读。 但是, 如果您不关心其他节点, 并且只希望基于具有特定属性的节点快速进行操作,则也可以使用以下方法:

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 : "";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM