Pretty Print是什么 如何用代码美化输出的XML
发布时间 - 2026-01-30 00:00:00 点击率:次Pretty Print 是将紧凑的 XML/JSON/HTML 字符串转为缩进换行的可读格式,不改变内容;Python 可用 minidom.toprettyxml()(轻量但不保留注释)或 ElementTree+minidom 组合(更健壮),命令行推荐 xmllint。
什么是 Pretty Print(格式化输出)
Pretty Print 指的是将原本紧凑、无换行、无缩进的 XML(或 JSON、HTML 等)字符串,转换为人类可读的、带缩进和换行的结构化文本。它不改变数据内容,只调整排版——比如把 变成多行缩进形式。
Python 用 xml.dom.minidom 实现 Pretty Print
这是标准库中最轻量、无需安装依赖的方式,适合简单 XML 字符串美化。注意:minidom 不保留注释和处理指令,且对非法/不规范 XML 容错性差。
- 必须先用
parseString()或parse()加载为 DOM 对象,再调用toprettyxml() -
toprettyxml(indent=" ", newl="\n", encoding=None)的indent默认是两个空格,newl控制换行符 - 常见坑:
toprettyxml()会在每行末尾加空行(因节点间文本节点被视为空白),需用正则清理
from xml.dom import minidomxml_str = '
' dom = minidom.parseString(xml_str) pretty_xml = dom.toprettyxml(indent=" ", newl="\n") - A
- B
清理多余空行
clean_xml = "\n".join([line for line in pretty_xml.split("\n") if line.strip()]) print(clean_xml)
Python 用 xml.etree.ElementTree + xml.dom.minidom 组合方案
当需要保留命名空间、更健壮地解析(比如含 CDATA 或特殊字符),推荐先用 ElementTree 解析,再转给 minidom 格式化——因为 ElementTree 本身没有内置 pretty print 方法。
-
ElementTree.tostring()输出的是 bytes,需 decode 成 str 后再喂给minidom.parseString() - 若原始 XML 有编码声明(如
),toprettyxml()会重复写入,建议设encoding=None并手动加声明 - 对大文件慎用:DOM 方式会全量加载到内存
import xml.etree.ElementTree as ET from xml.dom import minidomroot = ET.fromstring('
') rough_string = ET.tostring(root, encoding="unicode") reparsed = minidom.parseString(rough_string) pretty = reparsed.toprettyxml(indent=" ", newl="\n", encoding=None) print("\n".join(s for s in pretty.split("\n") if s.strip())) - hello
命令行用 xmllint 快速美化本地 XML 文件
开发调试时最省事的方

xmllint(Linux/macOS 通常随 libxml2 提供,Windows 可通过 Chocolatey 或手动下载)。
- 基础命令:
xmllint --format input.xml,输出到终端;加--output output.xml可保存 - 若 XML 编码不是 UTF-8,可能报错,加
--encode utf-8强制转码 - 注意:如果 XML 有 DTD 或 XSD 引用且网络不可达,
xmllint可能卡住或失败,加--noblanks或--dropdtd视情况绕过
实际执行示例:
$ xmllint --format --encode utf-8 data.xml > formatted.xml
真正麻烦的不是选哪个方法,而是 XML 是否良构——哪怕少一个闭合标签,所有美化工具都会抛异常。动手前先用 xmllint --noout file.xml 或 Python 的 ET.parse() 做一次校验,比反复调试格式化逻辑省十倍时间。
# linux
# python
# html
# js
# json
# windows
# 编码
# 工具
# mac
# macos
# win
# 格式化输出
# print
# 命名空间
# format
# xml
# 字符串
# 对象
# dom
# input
# 先用
# 换行
# 命令行
# 的是
# 这是
# 加载
# 会在
# 可达
# 报错
# 可通过
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
php打包exe后无法访问网络共享_共享权限设置方法【教程】
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
如何用PHP工具快速搭建高效网站?
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
详解vue.js组件化开发实践
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
如何快速搭建高效WAP手机网站?
如何在万网ECS上快速搭建专属网站?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
如何快速生成可下载的建站源码工具?
青岛网站建设如何选择本地服务器?
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
MySQL查询结果复制到新表的方法(更新、插入)
黑客如何通过漏洞一步步攻陷网站服务器?
如何快速搭建高效简练网站?
DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解
PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】
Python文件流缓冲机制_IO性能解析【教程】
韩国服务器如何优化跨境访问实现高效连接?
Laravel如何集成Inertia.js与Vue/React?(安装配置)
Python文件异常处理策略_健壮性说明【指导】
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
phpredis提高消息队列的实时性方法(推荐)
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
中山网站制作网页,中山新生登记系统登记流程?
详解jQuery中的事件
Laravel PHP版本要求一览_Laravel各版本环境要求对照
浅谈javascript alert和confirm的美化
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
如何在万网利用已有域名快速建站?
想要更高端的建设网站,这些原则一定要坚持!
利用vue写todolist单页应用
如何在建站之星绑定自定义域名?
Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】
Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法
Python3.6正式版新特性预览
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性
Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环

