如何从XDocument获取XML节点

34 .net c# linq linq-to-xml

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

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

<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;
Run Code Online (Sandbox Code Playgroud)

但我得到错误"对象参考不是设置....."

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

怎么可能????

提前致谢.........

Ond*_*ták 69

回应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>
Run Code Online (Sandbox Code Playgroud)

选择一个节点:

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());
Run Code Online (Sandbox Code Playgroud)

删除单个节点:

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");
Run Code Online (Sandbox Code Playgroud)

添加新节点:

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");
Run Code Online (Sandbox Code Playgroud)


mar*_*c_s 11

.Elements操作返回XElements的LIST - 但你真正想要的是一个SINGLE元素.添加这个:

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

通过这种方式,您可以告诉LINQ从您选择的XElements列表中为您提供第一个(或NULL,如果没有).

  • 您的编辑清楚了.他正在试图将查询用作结果集的经典错误成为牺牲品.http://stackoverflow.com/questions/594919/a-question-about-linq-to-sql/594975#594975我对类似问题的回答 (2认同)