在Python开发中,处理XML数据时经常会用到xmltodict库,它提供了便捷的字典与XML互转能力,其中unparse方法可以将Python字典转换为XML字符串。很多场景下我们需要输出的XML有清晰的缩进和换行,也就是实现pretty格式化效果,下面就来详细介绍具体的实现方法。

xmltodict库安装
首先确保已经安装了xmltodict库,如果未安装可以通过以下命令完成安装:
pip install xmltodict
unparse方法基础用法
unparse方法的基本作用是将字典转换为XML字符串,默认情况下输出的XML是紧凑格式,没有缩进和换行。下面是一个基础的使用示例:
import xmltodict
# 待转换的字典数据
data = {
"root": {
"user": {
"name": "张三",
"age": 25,
"hobby": ["篮球", "阅读"]
}
}
}
# 默认转换,无格式化
xml_str = xmltodict.unparse(data)
print(xml_str)
上述代码执行后输出的XML字符串为紧凑格式,所有内容都在同一行,可读性较差。
开启pretty格式化输出
要实现pretty格式化输出,只需要在调用unparse方法时传入pretty=True参数即可,该方法会自动为XML添加缩进和换行。修改后的代码如下:
import xmltodict
data = {
"root": {
"user": {
"name": "张三",
"age": 25,
"hobby": ["篮球", "阅读"]
}
}
}
# 开启pretty格式化
xml_str = xmltodict.unparse(data, pretty=True)
print(xml_str)
执行上述代码后,输出的XML字符串会有清晰的层级缩进,每个标签单独占一行,可读性大幅提升。
常用格式化参数配置
除了pretty=True之外,unparse方法还有一些和格式化相关的参数可以配置,满足不同的输出需求:
- indent:指定缩进的字符串,默认是四个空格,可以自定义为制表符或其他空格数量
- newl:指定换行的字符串,默认是换行符n,可以根据系统需求调整
- encoding:指定XML的编码格式,默认是utf-8
下面是一个自定义缩进的示例,将缩进设置为两个空格:
import xmltodict
data = {
"root": {
"user": {
"name": "张三",
"age": 25
}
}
}
# 自定义缩进为两个空格
xml_str = xmltodict.unparse(data, pretty=True, indent=" ")
print(xml_str)
注意事项
在使用pretty格式化时需要注意两个问题:
- 如果字典中的值包含特殊字符,xmltodict会自动进行转义处理,不需要手动处理
- pretty格式化会增加字符串的长度,如果是对性能要求极高的场景,需要权衡是否使用格式化输出
另外如果需要输出XML声明头,可以在unparse方法中传入full_document=True参数,默认该参数就是True,会输出<?xml version="1.0" encoding="utf-8"?>开头的完整XML文档。