C#中删除XML节点需先定位再调用Remove()或RemoveAll();XDocument推荐用Descendants()/Elements()查找后Remove(),XmlDocument须用RemoveChild()且倒序遍历多节点。
在C#中删除XML节点,关键是先定位目标节点,再调用 Remove() 或 RemoveAll() 方法;注意操作前要确保节点非空,且对 XDocument 或 XmlDocument 的处理方式略有不同。
XDocument 是现代、轻量、支持LINQ查询的XML处理方式,适合大多数场景。删除节点前需先查找到它,再调用 Remove()。
Descendants() 或 Elements() 查找匹配的节点,例如:doc.Descendants("Book").FirstOrDefault(x => (string)x.Attribute("id") == "102")?.Remove();
doc.Root?.Elements("Author").Remove();
node.Element("Price")?.Remove();
doc.Save("books.xml");
XmlDocument 需通过 XmlNode 对象操作,删除前必须从父节点调用 RemoveChild(),不能直接在节点上调用 Remove()。
var node = doc.SelectSingleNode("//Book[@id='102']"
); if (node != null) node.ParentNode.RemoveChild(node);
var nodes = doc.SelectNodes("//Comment"); for (int i = nodes.Count - 1; i >= 0; i--) nodes[i].ParentNode.RemoveChild(nodes[i]);
element.RemoveAll();
实际编码中容易忽略这些细节,导致异常或静默失败:
node、ParentNode 是否为 null,建议配合空条件操作符(?. )或 if 判断XDocument 中 Remove() 是扩展方法,需引入 System.Xml.Linq 命名空间XmlDocument 的 RemoveChild() 要求传入的节点必须属于当前文档,跨文档移动后需先 ImportNode()
用 XDocument 实现一行逻辑清晰的清理:
来电咨询