【python+requests】告别繁琐XML解析!用xmltodict.parse像处理JSON一样轻松操作XML

发布于:2025-09-02 ⋅ 阅读:(17) ⋅ 点赞:(0)

告别繁琐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 xmltodict

data = 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 文本 strbytes
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 json

data = 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, json

xml_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 库。实际使用请根据环境调整。