如何从XDocument获取XML节点

如何从XDocument使用LINQ获取XML元素?

假设我有一个XDocument命名的XMLDoc,如下所示:

<Contacts> <Node> <ID>123</ID> <Name>ABC</Name> </Node> <Node> <ID>124</ID> <Name>DEF</Name> </Node> </Contacts> XElement Contacts = from xml2 in XMLDoc.Elements("Contacts").Elements("Node") where xml2.Element("ID").Value == variable select xml2; 

但我得到错误“对象引用不设置…..”

如何使用LINQ从XML文件中获取特定节点? 我想更新该节点中的一些值?

怎么可能?

提前致谢………

回应OP发布的其他问题 。

的test.xml:

 <?xml version="1.0" encoding="utf-8"?> <Contacts> <Node> <ID>123</ID> <Name>ABC</Name> </Node> <Node> <ID>124</ID> <Name>DEF</Name> </Node> </Contacts> 

select一个节点:

 XDocument XMLDoc = XDocument.Load("test.xml"); string id = "123"; // id to be selected XElement Contact = (from xml2 in XMLDoc.Descendants("Node") where xml2.Element("ID").Value == id select xml2).FirstOrDefault(); Console.WriteLine(Contact.ToString()); 

删除单个节点:

 XDocument XMLDoc = XDocument.Load("test.xml"); string id = "123"; var Contact = (from xml2 in XMLDoc.Descendants("Node") where xml2.Element("ID").Value == id select xml2).FirstOrDefault(); Contact.Remove(); XMLDoc.Save("test.xml"); 

添加新节点:

 XDocument XMLDoc = XDocument.Load("test.xml"); XElement newNode = new XElement("Node", new XElement("ID", "500"), new XElement("Name", "Whatever") ); XMLDoc.Element("Contacts").Add(newNode); XMLDoc.Save("test.xml"); 

这里还有一个很好的parsingXML的教程。 希望它有帮助。

.Elements操作返回一个XElements的列表 – 但是你真正想要的是一个SINGLE元素。 加这个:

 XElement Contacts = (from xml2 in XMLDoc.Elements("Contacts").Elements("Node") where xml2.Element("ID").Value == variable select xml2).FirstOrDefault(); 

通过这种方式,您可以告诉LINQ从您select的XElements列表中给出第一个(或NULL,如果没有的话)。

渣子