【python+requests】告别繁琐XML解析!用xmltodict.parse像处理JSON一样轻松操作XML
告别繁琐XML解析!用xmltodict.parse像处理JSON一样轻松操作XML
本文介绍如何借助 xmltodict.parse() 方法,像处理 JSON 一样轻松读写 XML 内容。
在日常开发中,我们常常需要处理 XML 数据,无论是接口响应、配置文件还是数据存储格式。但 XML 解析通常需要借助 DOM 或 SAX 方式,代码写起来比较繁琐。
今天介绍一个 Python 神器:xmltodict,它的 parse 方法能快速将 XML 字符串转为 Python 字典,大大提升处理效率。
一、xmltodict.parse 是什么?
xmltodict.parse(res_text) 是 Python 第三方库 xmltodict
的核心方法,它的作用是将 XML 字符串解析成 Python 的字典(dict)或有序字典(OrderedDict),使我们可以像操作 JSON 一样轻松访问 XML 数据。
核心价值:
- 省去繁琐解析:不再需要手动解析 XML 节点
- 代码简洁明了:直接通过键名访问数据
- 转换灵活:可轻松将 XML 转为 JSON 或其他格式
二、使用场景
场景类型 | 描述 |
---|---|
爬虫/接口返回 | 处理微信、支付宝、SOAP、RSS 等返回的 XML 数据 |
配置文件读取 | 解析 XML 格式的配置文件,如 Spring、Tomcat 配置 |
数据格式转换 | 将 XML 转换为 JSON(先转 dict,再转 JSON 字符串) |
快速数据提取 | 避免写 XPath,直接通过字典键值获取数据 |
三、安装方法
使用前先安装库:
pip install xmltodict
四、基础用法与示例
示例XML:
<bookstore><book id="1"><title>Python编程</title><author>张三</author><price>59.9</price></book><book id="2"><title>深度学习</title><author>李四</author><price>78.5</price></book>
</bookstore>
转换为字典:
import xmltodictdata = xmltodict.parse(xml_text)
print(data['bookstore']['book'][0]['title']) # 输出:Python编程
print(data['bookstore']['book'][1]['author']) # 输出:李四
五、实际应用示例:处理微信支付回调
from flask import request
import xmltodict@app.route('/wxpay/notify', methods=['POST'])
def wxpay_notify():xml_data = request.data.decode('utf-8')data = xmltodict.parse(xml_data)['xml']out_trade_no = data['out_trade_no']result_code = data['result_code']return '<xml><return_code><![CDATA[SUCCESS]]></return_code></xml>'
六、参数详解(表格版)
参数名 | 说明 | 常用值 |
---|---|---|
xml_input | 必填,XML 文本 | str 或 bytes |
encoding | 编码方式 | 'utf-8' |
process_namespaces | 是否处理命名空间 | True/False |
force_list | 强制指定某些标签为列表 | ('book', ) |
attr_prefix | 属性前缀 | '@' |
disable_entities | 禁用外部实体(防XXE攻击) | 建议保持 True |
七、常见转换规则(XML → Dict)
XML 片段 | 转换后的字典结构 |
---|---|
<book id="1">Python</book> | {'book': {'@id': '1', '#text': 'Python'}} |
<a><b>1</b><b>2</b></a> | {'a': {'b': ['1', '2']}} |
<x y="z"/> | {'x': {'@y': 'z'}} |
八、判断数据是 Dict 还是 JSON
判断方式 | 代码 | 结果类型 |
---|---|---|
是否为字典 | type(obj) == dict | <class 'dict'> |
是否为 JSON 字符串 | type(obj) == str 且能通过 json.loads() | <class 'str'> |
import jsondata = xmltodict.parse(xml_string)
print(type(data)) # <class 'dict'>json_str = json.dumps(data)
print(type(json_str)) # <class 'str'>
九、完整转换流程:XML → Dict → JSON
步骤 | 操作 | 输入 | 输出示例 | 说明 |
---|---|---|---|---|
① | 原始数据 | XML 字符串 | <user><name>Tom</name></user> | 原始 XML 格式 |
② | xmltodict.parse() | ①的输出 | {'user': {'name': 'Tom'}} | 转为 Python 字典 |
③ | json.dumps() | ②的输出 | {"user": {"name": "Tom"}} | 转为 JSON 字符串 |
import xmltodict, jsonxml_text = "<user><name>Tom</name></user>"
dict_data = xmltodict.parse(xml_text)
json_text = json.dumps(dict_data, ensure_ascii=False, indent=2)
十、总结
- xmltodict.parse() 让我们能像处理 JSON 一样处理 XML,极大提升开发效率。
- 适用于接口响应、配置解析、数据转换等多种场景。
- 支持属性转换、强制列表、命名空间处理等高级功能。
- 推荐在不需要复杂 XML schema 验证的场景中使用。
如果你经常需要处理 XML,不妨试试 xmltodict,它也许能成为你的开发利器。
文章示例代码基于 Python 3,xmltodict 库。实际使用请根据环境调整。