推荐优先使用XDocument删除XML节点,先Load加载、Descendants+Where定位、ToList后Remove、最后Save;XmlDocument需通过ParentNode.RemoveChild;注意空节点清理、命名空间和线程安全。
在C#中从XML文件中删除节点,核心是使用XmlDocument或XDocument(LINQ to XML)加载文档,定位目标节点,再调用删除方法。推荐优先使用XDocument,语法更简洁、功能更现代。
适用于按元素名、属性值或条件批量删除节点。先加载XML,再用LINQ查询定位,最后调用Remove():
XDocument.Load("path.xml")加载文件Descendants("NodeName")查找所有同名节点,或加Where()筛选(如e.Attribute("id")?.Value == "123")Remove()(注意:必须在集合上操作,不能边遍历边删,建议转成ToList())Save()写回文件示例:删除所有中status="inactive"的节点
XmlDocument操作稍显繁琐,必须通过父节点调用RemoveChild(),不能直接删自身:
Load()加载XMLSelectNodes()或SelectSingleNode()定位目标节点(支持XPath)ParentNode,再调用RemoveChild(目标节点)
Save()持久化示例:删除根下第一个节点
有时需要清理空白文本节点(#text)或内容为空的元素,避免格式混乱:
NodeType == XmlNodeType.Element且IsEmpty为true,或InnerText.Trim() == ""
#text节点可能影响排版,建议仅在确定安全时操作
删除前务必确认节点存在,否则会抛出NullReferenceException;修改后记得Save(),否则只在内存中生效。若XML有命名空间,查询时必须声明并使用XNamespace,否则找不到节点。多线程环境下操作同一文件需加锁,避免读写冲突。