在Python开发过程中,XML和JSON都是常用的数据交换格式,很多开发者对JSON的字典式操作非常熟悉,但处理XML时往往需要遍历节点、获取属性,操作逻辑相对复杂。xmltodict库可以让开发者用处理JSON的方式处理XML,大幅降低XML数据的操作难度。

xmltodict库的安装
xmltodict是第三方库,需要通过pip命令安装,执行以下命令即可完成安装:
# 安装xmltodict库 pip install xmltodict
XML转Python字典
xmltodict最核心的功能是将XML字符串转换为Python字典,转换后的结构和JSON转换后的字典操作逻辑完全一致。下面是一个简单的示例:
import xmltodict
# 定义XML字符串
xml_str = '''<user>
<name>张三</name>
<age>25</age>
<hobby>编程</hobby>
<hobby>阅读</hobby>
</user>'''
# 将XML转换为字典
xml_dict = xmltodict.parse(xml_str)
print(xml_dict)
# 输出:{'user': {'name': '张三', 'age': '25', 'hobby': ['编程', '阅读']}}
# 像操作JSON字典一样获取数据
print(xml_dict['user']['name']) # 输出:张三
print(xml_dict['user']['hobby'][0]) # 输出:编程
可以看到,转换后的字典结构和我们熟悉的JSON字典完全一致,直接通过键名就能获取对应的值,重复的子节点会自动转换为列表。
处理带属性的XML
如果XML节点带有属性,xmltodict会将属性放在以@开头的键中,文本内容放在#text键中,示例如下:
import xmltodict
xml_with_attr = '''<book id="1001">
<title>Python编程入门</title>
<price currency="CNY">59.9</price>
</book>'''
book_dict = xmltodict.parse(xml_with_attr)
print(book_dict)
# 输出:{'book': {'@id': '1001', 'title': 'Python编程入门', 'price': {'@currency': 'CNY', '#text': '59.9'}}}
# 获取属性值
print(book_dict['book']['@id']) # 输出:1001
print(book_dict['book']['price']['@currency']) # 输出:CNY
# 获取文本内容
print(book_dict['book']['price']['#text']) # 输出:59.9
Python字典转XML
xmltodict也支持将Python字典转换为XML字符串,对应方法是xmltodict.unparse,用法如下:
import xmltodict
# 定义字典数据
data_dict = {
'student': {
'name': '李四',
'score': {
'math': 90,
'english': 85
}
}
}
# 将字典转换为XML
xml_result = xmltodict.unparse(data_dict, pretty=True)
print(xml_result)
输出的XML格式会自动缩进,可读性较好,如果需要紧凑格式的XML,可以将pretty参数设置为False。
常见使用场景
- 解析接口返回的XML格式响应数据,转换为字典后提取所需字段
- 将本地存储的字典数据转换为XML格式,用于数据交换或配置文件生成
- 处理带有命名空间的XML数据,xmltodict也支持相关参数配置
注意事项
xmltodict转换后的所有值默认都是字符串类型,如果需要数值类型,需要手动转换。另外处理大体积XML文件时,建议使用流式解析方式,避免占用过多内存。
通过以上用法,开发者可以完全用处理JSON的习惯来处理XML数据,大幅提升XML相关开发的效率。