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,如果没有).
渣