C#怎么删除XML节点 C#移除XML元素教程
技术百科
煙雲
发布时间:2025-12-30
浏览: 次 C#中删除XML节点需先定位再调用Remove()或RemoveAll();XDocument推荐用Descendants()/Elements()查找后Remove(),XmlDocument须用RemoveChild()且倒序遍历多节点。
在C#中删除XML节点,关键是先定位目标节点,再调用 Remove() 或 RemoveAll() 方法;注意操作前要确保节点非空,且对 XDocument 或 XmlDocument 的处理方式略有不同。
使用 XDocument 删除指定元素(推荐 LINQ to XML)
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 删除节点(传统 DOM 方式)
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() - 删除后如需重新加载或序列化,注意编码是否一致(如 UTF-8 带 BOM),否则保存可能出乱码
简单示例:删除所有无标题的 Book 元素
用 XDocument 实现一行逻辑清晰的清理:
doc.Root?.Elements("Book")
.Where(b => string.IsNullOrWhiteSpace(b.Element("Title")?.Value))
.ToList()
.ForEach(b => b.Remove());
doc.Save("library_clean.xml");
# 第一个
# 常见问题
# 文档
# 符合条件
# 如需
# 清空
# 对象
# String
# if
# int
# 编码
# c#
# xml
# var
# node
# NULL
# foreach
# 命名空间
# bom
# 最常见
# 别忘了
# Attribute
# 遍历
# for
# dom
# count
# xml处理
# linq
# 到它
# 无标题
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Windows蓝屏错误0x00000018怎么处理
- Windows11如何设置专注助手_Windows
- Linux怎么查找死循环进程_Linux系统负载分
- 如何使用Golang defer优化性能_减少不必
- c++的位运算怎么用 与、或、异或、移位操作详解【
- 如何使用Golang模拟请求超时_Golang c
- 小程序里php怎么变mp4_小程序调用php生成m
- php485在macos下怎么配置_php485
- php本地部署后数据库连接报错_1045acces
- c++怎么操作redis数据库_c++ hired
- 如何使用Golang指针与结构体结合_修改结构体内
- Python网络超时处理_健壮性设计说明【指导】
- PHP 中如何在函数内持久化修改引用变量的指向
- Windows10如何删除Windows.old_
- Win11怎么设置组合键快捷方式_Windows1
- 如何快速验证Golang安装是否成功_运行go v
- Windows10系统服务优化指南_Win10禁用
- Win11怎么把图标拖到任务栏_Win11固定应用
- 如何在Golang中解压文件_Golang com
- Win11如何关闭小娜Cortana Win11禁
- c++中的std::conjunction和std
- Python音视频处理高级项目教程_FFmpegP
- Windows 10怎么隐藏特定更新补丁_Wind
- MAC怎么截图并快速编辑_MAC自带截图快捷键与标
- VSC里PHP变量未定义报错怎么解决_错误抑制技巧
- php485支持哪些操作系统_php485跨系统支
- Win11怎么设置默认图片查看器_Windows1
- Win11怎样安装网易云音乐_Win11安装网易云
- Win11怎么关闭触摸键盘图标_Windows11
- Win11怎么查看硬盘型号_Windows 11检
- 如何用正则与预处理结合精准拦截拼接式垃圾域名
- Windows10如何更改鼠标图标_Win10鼠标
- Win11怎么恢复误删照片_Win11数据恢复工具
- c++ reinterpret_cast怎么用 c
- Win10如何更改任务栏高度_Windows10解
- Win11怎么关闭资讯和兴趣_Windows11任
- Windows音频驱动无声音原因解析_声卡驱动错误
- php高频调试功能有哪些_php常用调试函数与工具
- C++如何将C风格字符串(char*)转换为std
- Win11怎么硬盘分区 Win11新建磁盘分区详细
- windows如何备份注册表_windows导出和
- Python列表推导式与字典推导式教程_简化代码高
- 如何在Golang中使用container/hea
- Win11触摸板没反应怎么办_开启Win11笔记本
- 如何使用正则表达式提取以编号开头、后跟多个注解的完
- Win11怎么关闭搜索历史 Win11清除搜索框最
- 微信短链接怎么还原php_用浏览器开发者工具抓包获
- Go 中 defer 在 goroutine 内部
- Win11截图快捷键是什么_Win11自带截图工具
- Win10怎样清理C盘浏览器缓存_Win10清理浏

Document须用RemoveChild()且倒序遍历多节点。
QQ客服