应使用XDocument或XmlDocument解析XML后安全替换,而非字符串替换;支持替换元素值、属性值及纯文本节点,需注意命名空间、混合内容处理和大文件流式处理。
在C#中对XML文件进行查找并替换文本内容,关键在于区分“替换元素/属性的值”和“替换XML中的纯文本节点”。直接用字符串替换(如File.ReadAllText().Replace())容易破坏XML结构,不推荐。应使用XML解析器(如XDocument或XmlDocument)安全遍历并修改节点。
适用于已知元素路径(如、),需精准定位并更新其内部文本值。
XDocument.Load()加载XML文件Descendants("ElementName")查找所有匹配元素node.Nodes().OfType() 或直接用node.Value获取/设置文本Save()写回文件示例:将所有元素的文本从"OldName"改为"NewName"
XDocument doc = XDocument.Load("data.xml");
foreach (var nameNode in doc.Descendants("Name"))
{
if (nameNode.Value == "OldName")
nameNode.Value = "NewName";
}
doc.Save("data.xml");
当目标是修改属性(如id="123"、status="pending")时,需定位到XAttribute对象。
Elements().Attributes("AttributeName")或Descendants().Attributes()筛选attribute.Value读取和赋值示例:把所有type="legacy"改为type="modern"
foreach (var attr in doc.Descendants().Attributes("type"))
{
if (attr.Value == "legacy")
attr.Value = "modern";
}
当XML存在混合内容(如 Hello world!),文本分散在多个XText节点中,需遍历所有文本节点。
doc.DescendantNodes().OfType() 获取全部文本节点XText调用Replace(),但注意:不能直接改node.Value(只读),需用node.ReplaceWith()
示例:仅在元素内替换"error"为"warning"
foreach (var content in doc.Descendants("Content"))
{
var textNodes = content.Nodes().OfType().ToList();
foreach (var textNode in textNodes)
{
string updated = textNode.Value.Replace("error", "warning");
textNode.ReplaceWith(new XText(updated));
}
}
XML不是普通文本,操作不当会导致格式错误或数据丢失。
string.Replace()直接处理整个XML字符串——会误改标签名、属性名或CDATA内容ToString()预览变更XNamespace,否则Descendants("Item")可能找不到节点XDocument(内存加载),可考虑XmlReader/XmlWriter流式处理
# node
# xml解析
# c#
# 作用域
# 数据丢失
# String
# 命名空间
# xml
# Error
# 字符串
# Attribute
# 对象
# 遍历
# 流式
# 大文件
# 加载
# 多个
# 找不到
# 适用于
# 而非
# 中对
# 先用
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
php中self::能调用子类重写的方法吗_静态绑定与重写关系【介绍】
Win11文件扩展名怎么显示_Win11查看文件后缀名设置【基础】
如何使用Golang table-driven基准测试_多组数据测量函数效率
如何在 Go 中创建包含 map 的 slice(嵌套数据结构)
如何在 Go 中调用动态链接库(.so)中的函数
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
php打包exe怎么传递参数_命令行参数接收方法【解答】
如何在包含多值的列中精准搜索指定演员?
Win11 C盘满了怎么清理 Win11磁盘清理和存储感知使用教程【新手必看】
Linux怎么修改用户密码_Linux系统passwd命令使用与权限管理【方法】
Win11怎么更改电脑密码_Windows 11修改本地账户密码【步骤】
Win11怎样安装企业微信_Win11安装企业微信教程【步骤】
如何使用Golang实现容器自动化运维_Golang Docker运维管理方法
Win11怎么关闭键盘按键音_Win11禁用打字声音反馈【教程】
Win11怎么查看局域网电脑_Windows 11网络邻居发现设置【技巧】
跨文件调用类方法怎么用_php作用域操作符与自动加载配合【介绍】
Win10系统怎么查看网络连接状态_Windows10网络和共享中心
如何使用Golang sort排序切片_Golang sort排序方法示例
Win11怎么清理C盘OneDrive缓存_Win11清理OneDrive缓存技巧【方法】
Win11怎么设置虚拟键盘_打开Win11屏幕键盘操作指南【技巧】
如何使用Golang实现微服务状态监控_Golang服务运行状态采集方法
Win11怎么关闭定位服务_保护Win11位置隐私设置指南【详解】
Mac怎么开启“任何来源”_Mac安装未签名应用的设置方法【解决】
php查询数据怎么分组_groupby分组查询配合聚合函数【技巧】
微信企业付款回调PHP怎么接收_处理企业付款异步通知数据教程【教程】
如何使用Golang实现文件加密_Golang crypto 文件加密示例
Win11怎么卸载Photos应用_Win11卸载Photos应用方法【教程】
Windows10怎么查看系统激活状态_Windows10激活状态查看方法【教程】
Win11怎么关闭用户账户控制UAC_Windows11更改通知设置等级
Win10路由器怎么隐藏ssid Win10隐藏wifi名称设置【指南】
TestNG的testng.xml配置文件怎么写
php删除数据怎么清空表_truncate与delete区别及用法【汇总】
php本地部署支持nodejs吗_php与nodejs混合开发环境搭建教程【教程】
Windows10系统更新错误0x80070002_Win10自动更新失败手动修复
如何在 Go 中可靠地测试含 time.Time 字段的结构体
MySQL 中使用 IF 和 CASE 实现查询字段条件化显示
如何在Golang中实现服务熔断与限流_Golang微服务容错与流控方法
Win11怎么关闭搜索历史_Win11清除任务栏搜索记录【隐私】
Windows10系统怎么查看显卡型号_Win10 dxdiag显示选项卡
Win11怎么设置任务栏图标大小_Windows11注册表TaskbarSi修改
Windows服务启动类型恢复方法_错误修改导致的系统服务异常
Win11怎么设置单手模式_Win11触控键盘布局调整教程【技巧】
Win11怎么设置麦克风权限_允许应用访问Win11麦克风【详解】
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
Go 中的 := 运算符:类型推导机制与使用边界详解
Win11怎么设置多显示器任务栏 Win11扩展任务栏至多屏方便跨屏操作【技巧】
Win11怎么关闭自动修复_跳过Win11开机自动修复循环【技巧】
如何使用Golang实现路由分组管理_Golang路由分组与权限控制方法
如何在Golang中处理JSON字段缺失_Golangjson解析字段校验方法
2026-01-02
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。