C#如何在一个XML文件中查找并替换文本内容
技术百科
月夜之吻
发布时间:2026-01-02
浏览: 次 应使用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()预览变更 - 若XML含命名空间,查询时必须声明并使用
XNamespace,否则Descendants("Item")可能找不到节点 - 大文件慎用
XDocument(内存加载),可考虑XmlReader/XmlWriter流式处理
# 加载
# 多个
# 找不到
# 适用于
# 而非
# 先用
# Error
# 对象
# String
# c#
# xml
# 字符串
# node
# 数据丢失
# 作用域
# 命名空间
# xml解析
# Attribute
# 遍历
# 流式
# 大文件
# 中对
相关栏目:
<?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; ?>
】
相关推荐
- 如何使用Golang实现聊天室消息存档_存储聊天记
- Linux怎么查找死循环进程_Linux系统负载分
- Windows系统时间服务错误_W32Time服务
- Win10怎样清理C盘浏览器缓存_Win10清理浏
- Windows怎样拦截QQ浏览器广告_Window
- 如何在Golang中捕获HTTP服务器错误_Gol
- php中self::能调用子类重写的方法吗_静态绑
- Go语言中slice追加操作的底层共享机制解析
- Win11讲述人怎么关闭_Win11误触开启语音朗
- Win11怎么更改账户头像_Windows 11自
- 如何在Golang中捕获结构体方法错误_Golan
- php8.4如何调用com组件_php8.4win
- C++中的constexpr和const有什么区别
- Mac电脑如何恢复出厂设置_Mac抹掉数据并重装系
- Win11输入法选字框不见了怎么办_Win11输入
- Win10任务栏天气和资讯怎么关闭 Win10禁用
- 如何提升Golang JSON序列化性能_Gola
- Win10怎样清理C盘爱奇艺缓存_Win10清理爱
- php怎么连接数据库_MySQL数据库连接的基础代
- 如何使用Golang实现路由分组管理_Golang
- Windows 10怎么隐藏特定更新补丁_Wind
- Win10怎样清理C盘Steam游戏缓存_Win1
- Windows10如何更改日期格式_Win10区域
- Win11怎么关闭任务栏小组件_Windows11
- Win11怎样安装企业微信_Win11安装企业微信
- LINUX如何开放防火墙端口_Linux fire
- Python集合操作技巧_高效去重解析【教程】
- Win11如何更新显卡驱动 Win11检查和安装设
- Win11怎么开启智能存储_Windows11存储
- Windows蓝屏错误0x00000023怎么修复
- Win11怎么设置ipv4地址_Windows 1
- Windows服务启动类型恢复方法_错误修改导致的
- php订单日志怎么记录物流_php记录订单物流变更
- c++中explicit(bool)的用法 c++
- Mac如何调整Dock栏大小和位置_Mac程序坞个
- MAC如何修改默认应用程序_MAC文件后缀关联设置
- TestNG的testng.xml配置文件怎么写
- Win10怎么卸载金山毒霸_Win10彻底卸载金山
- Win11怎么关闭通知中心_Windows11系统
- Win11怎么打开旧版计算器_Win11恢复传统计
- php485在php5.6下能用吗_php485旧
- Python高性能计算项目教程_NumPyCyth
- c++怎么使用std::tuple存储多元组数据_
- Win11怎么关闭OneDrive同步_Win11
- Windows如何使用注册表查找和删除项?(reg
- 如何使用正则表达式精确匹配最多含一个换行符的 st
- 如何在Golang中实现文件下载_Golang文件
- Laravel 查询 JSON 列:高效筛选包含数
- Avalonia如何实现跨窗口通信 Avaloni
- Windows服务无法启动错误1067是什么_进程

ment或XmlDocument解析XML后安全替换,而非字符串替换;支持替换元素值、属性值及纯文本节点,需注意命名空间、混合内容处理和大文件流式处理。
QQ客服