如何从 XDocument 获取 XML 节点
Posted
技术标签:
【中文标题】如何从 XDocument 获取 XML 节点【英文标题】:How to Get XML Node from XDocument 【发布时间】:2009-04-15 15:34:13 【问题描述】:如何使用 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;
但我收到错误“对象引用不设置.....”
如何使用 LINQ 从 XML 文件中获取特定节点? 我想更新该节点中的一些值?
这怎么可能????
提前致谢…………
【问题讨论】:
【参考方案1】: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>
选择单个节点:
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");
【讨论】:
链接已失效。【参考方案2】:.Elements 操作返回一个 XElements 列表 - 但您真正想要的是一个 SINGLE 元素。添加这个:
XElement Contacts = (from xml2 in XMLDoc.Elements("Contacts").Elements("Node")
where xml2.Element("ID").Value == variable
select xml2).FirstOrDefault();
这样,您告诉 LINQ 从您选择的 XElement 列表中为您提供第一个(或 NULL,如果没有)。
马克
【讨论】:
您的编辑说明了这一点。他陷入了试图将查询用作结果集的经典错误。 ***.com/questions/594919/a-question-about-linq-to-sql/…我对类似问题的回答 您好,感谢您的回复。但是我仍然收到错误.......通过这个查询,我怎样才能在XDocument中添加新节点,更新和删除节点???? 如果你想添加新元素,你需要抓住你想添加东西的XElement。你想让我做什么?您无法通过一个查询完成所有操作...以上是关于如何从 XDocument 获取 XML 节点的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Xml 属性绑定到 Treeview 节点,同时将 XDocument 数据绑定到 WPF Treeview