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 等)字符串,转换为人类可读的、带缩进和换行的结构化文本。它不改变数据内容,只调整排版——比如把 12 变成多行缩进形式。

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 minidom

xml_str = 'AB' dom = minidom.parseString(xml_str) pretty_xml = dom.toprettyxml(indent=" ", newl="\n")

清理多余空行

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 minidom

root = ET.fromstring('hello') 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()))

命令行用 xmllint 快速美化本地 XML 文件

开发调试时最省事的方

式:不用写代码,直接 shell 调用系统工具。前提是已安装 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动态控制复利计算循环