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

时间:2013-12-18 07:35:01

标签: c# xml linq linq-to-xml

我有一个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

2 个答案:

答案 0 :(得分:1)

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']");

答案 1 :(得分:0)

谢尔盖的答案更准确,更易读。但是,如果您不关心其他节点,如果您只想在具有特定属性的节点上使用快速 的内容,你也可以用这个:

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