0

0

C#如何处理XML中的空白字符(Whitespace)? 解析结果不符合预期的原因

幻夢星雲

幻夢星雲

发布时间:2025-12-02 21:05:02

|

902人浏览过

|

来源于php中文网

原创

XML解析时空白处理需关注PreserveWhitespace和IgnoreWhitespace设置,默认忽略空白可能导致节点数差异,建议用XmlReaderSettings控制行为,使用Elements或Descendants按名称查找元素,并对文本内容调用Trim()清理首尾空格,确保解析稳定。

c#如何处理xml中的空白字符(whitespace)? 解析结果不符合预期的原因

在C#中处理XML时,空白字符(Whitespace)常常导致解析结果不符合预期。问题通常不是代码写错了,而是对XML解析器如何处理空白的默认行为理解不足。

XML解析器默认会保留或忽略空白

XmlDocument、XElement 和 XmlReader 等类在读取XML时,有一个关键设置:PreserveWhitespace。这个属性决定了是否保留XML中的空白节点。

常见情况:

  • PreserveWhitespace = false(默认),解析器会自动忽略大多数空白文本节点,尤其是元素之间的缩进和换行。
  • PreserveWhitespace = true,所有空白都会作为文本节点保留,可能导致多出不必要的子节点。

例如,有如下XML:


  A
  B

如果未开启保留空白,root.ChildNodes 可能只有两个 元素节点;但如果开启了,可能会看到4个或更多节点,中间夹着代表换行和空格的文本节点。

使用XElement时容易忽略的细节

XElementLINQ to XML 默认不保留空白,但如果你从 XmlReader 加载,而该 reader 设置了 IgnoreWhitespace = false,结果可能包含多余内容。

建议做法:

  • 加载XML时明确控制行为:
var settings = new XmlReaderSettings { IgnoreWhitespace = true };
using var reader = XmlReader.Create("data.xml", settings);
var doc = XDocument.Load(reader);

这样可以跳过无关的空白文本节点,避免后续遍历时误判内容。

北极象沉浸式AI翻译
北极象沉浸式AI翻译

免费的北极象沉浸式AI翻译 - 带您走进沉浸式AI的双语对照体验

下载

CDATA与实际文本中的空格也要注意

即使没有格式化空白,元素内部的文本也可能包含开头或结尾的空格:

  张三  

直接用 element.Value 会得到 " 张三 ",包含前后空格。若用于比较或显示,应手动清理:

string name = element.Value.Trim();

特别是从用户输入生成的XML,更需做规范化处理。

验证XML是否带格式化(Pretty Print)

开发中常见的问题是:测试用的XML是“美化”过的(带缩进),而生产数据可能是压缩一行的。两者在节点结构上表现不同。

解决方案:

  • 不要依赖 ChildNodes.Count 或索引来访问元素。
  • 改用 element.Elements("item")element.Descendants("item") 按名称查找,这才是稳定方式。

基本上就这些。关键是理解空白何时被保留、何时被忽略,并在读取时统一控制行为,避免因格式差异导致逻辑错误。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

185

2023.09.27

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

197

2023.11.20

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1881

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2087

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

1015

2024.11.28

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

0

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

38

2026.01.18

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

99

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

148

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
HTML5/CSS3/JavaScript/ES6入门课程
HTML5/CSS3/JavaScript/ES6入门课程

共102课时 | 6.7万人学习

前端基础到实战(HTML5+CSS3+ES6+NPM)
前端基础到实战(HTML5+CSS3+ES6+NPM)

共162课时 | 18.9万人学习

第二十二期_前端开发
第二十二期_前端开发

共119课时 | 12.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号