0

0

Python xml.dom.minidom美化 toprettyxml方法格式化输出

星降

星降

发布时间:2026-02-27 02:29:30

|

602人浏览过

|

来源于php中文网

原创

用 remove_blank_nodes() 清理空白文本节点并显式指定 encoding="utf-8" 可解决空行过多和中文乱码问题;indent 参数控制缩进字符但首行空行需手动 strip(),大文件应换用 lxml.etree。

python xml.dom.minidom美化 toprettyxml方法格式化输出

toPrettyXML 输出空行太多,怎么去掉?

因为 toPrettyXML() 默认把文本节点(比如换行、缩进空格)也当作独立节点处理,一美化就塞满空行。这不是 bug,是 DOM 解析时把原始 XML 里的换行当成了 Text 节点,美化时又给它们加了缩进。

  • 最直接的办法:在调用 toPrettyXML() 前,递归清理掉所有纯空白的 Text 节点
  • 别用正则删空行——XML 结构可能嵌套,文本内容里也可能有合法换行
  • 注意:清理后如果原始 XML 里有带意义的空白(比如 <pre class="brush:php;toolbar:false;">&lt;/code&gt; 里的缩进),也会被误杀,得按需保留&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;brush:php;toolbar:false;&quot;&gt; def remove_blank_nodes(node): if node.nodeType == node.TEXT_NODE and not node.data.strip(): node.parentNode.removeChild(node) else: for child in node.childNodes[:]: # [:] 防止遍历时修改列表 remove_blank_nodes(child) &lt;p&gt;doc = minidom.parse(&quot;input.xml&quot;) remove_blank_nodes(doc.documentElement) print(doc.toprettyxml(indent=&quot; &quot;, encoding=&quot;utf-8&quot;).decode())&lt;/p&gt;</pre><h3>indent 参数不生效,缩进还是 2 个空格?</h3> <p><code>toPrettyXML()indent 参数只控制层级缩进字符串,但默认会把换行符硬编码为 \n,且开头多一个换行——这是 CPython 实现细节,不是你传错参数。

    • 如果你传 indent=" " 却看到缩进是 4 空格或制表符,大概率是编辑器自动转换了空格/Tab,或终端显示异常
    • indent="\t" 是合法的,但某些旧版 Python(如 3.7 之前)对 Tab 处理不稳定,建议坚持用空格
    • 无法通过参数去掉首行空行,必须手动 .strip() 或切片

    中文乱码或报 UnicodeEncodeError?

    常见于 Python 3.7 及更早版本:toPrettyXML() 默认用 us-ascii 编码输出,遇到中文直接崩。

    启科网络PHP商城系统
    启科网络PHP商城系统

    启科网络商城系统由启科网络技术开发团队完全自主开发,使用国内最流行高效的PHP程序语言,并用小巧的MySql作为数据库服务器,并且使用Smarty引擎来分离网站程序与前端设计代码,让建立的网站可以自由制作个性化的页面。 系统使用标签作为数据调用格式,网站前台开发人员只要简单学习系统标签功能和使用方法,将标签设置在制作的HTML模板中进行对网站数据、内容、信息等的调用,即可建设出美观、个性的网站。

    下载
    • 必须显式指定 encoding 参数,例如 encoding="utf-8"
    • 返回值类型取决于是否传 encoding:不传 → str;传了 → bytes,别忘了 .decode() 再打印
    • 如果写入文件,别用 print(..., file=f) 直接写 bytes,会报错;要么用 open(..., "wb"),要么 decode 后用 "w" 模式

    性能差、大文件卡死?

    minidom 是基于 DOM 的全内存解析,toPrettyXML() 还要遍历整棵树生成字符串——10MB 以上 XML 就明显吃力。

    立即学习Python免费学习笔记(深入)”;

    • 不是格式化慢,是整个 DOM 树太重;minidom 本就不适合大文件
    • 真要处理大 XML,换 lxml.etree + pretty_print=True,快十倍不止,还支持压缩输出
    • 若只能用 minidom,至少避免多次调用 toPrettyXML();结果缓存住,别反复生成

    实际用的时候,空白清理和编码参数这两个点漏掉一个,输出就不可用。其他问题基本都绕不开这两块。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

192

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

14

2026.02.03

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

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

1936

2024.04.01

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

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

2111

2024.08.01

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

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

1137

2024.11.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

638

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

218

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1560

2023.10.24

Golang 实际项目案例:从需求到上线
Golang 实际项目案例:从需求到上线

《Golang 实际项目案例:从需求到上线》以真实业务场景为主线,完整覆盖需求分析、架构设计、模块拆分、编码实现、性能优化与部署上线全过程,强调工程规范与实践决策,帮助开发者打通从技术实现到系统交付的关键路径,提升独立完成 Go 项目的综合能力。

1

2026.02.26

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.6万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.7万人学习

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

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