You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现XML转字典:附指定XML配置示例

Python将XML转换为字典的实现方案

嘿,要把你提供的这类XML转换成Python字典,最省心的方式就是用xmltodict这个第三方库——它专门做XML和Python原生数据结构的互转,语法简洁还能完美处理XML的属性和嵌套结构。

步骤1:安装xmltodict库

首先得把库装到你的环境里,打开终端跑这个命令:

pip install xmltodict

步骤2:编写转换代码

我先把你给出的XML补全(最后那段截断的部分我假设是完整的processing_fee节点),然后写完整的转换示例:

示例XML(补全后)

<?xml version="1.0" encoding="UTF-8"?>
<fee_config>
  <fees member_group="00400F" mail_retail="MAIL">
    <admin_fee>0.76</admin_fee>
    <processing_fee>1.83</processing_fee>
  </fees>
  <fees member_group="00400F" mail_retail="RETAIL">
    <admin_fee>1.335</admin_fee>
    <processing_fee>1.645</processing_fee>
  </fees>
  <fees member_group="00460G" mail_retail="MAIL">
    <admin_fee>0.88</admin_fee>
    <processing_fee>1.95</processing_fee>
  </fees>
</fee_config>

转换代码

import xmltodict

# 如果你是从文件读取XML,用下面的方式
# with open('fee_config.xml', 'r', encoding='utf-8') as f:
#     xml_content = f.read()

# 直接用字符串形式的XML内容
xml_content = """<?xml version="1.0" encoding="UTF-8"?>
<fee_config>
  <fees member_group="00400F" mail_retail="MAIL">
    <admin_fee>0.76</admin_fee>
    <processing_fee>1.83</processing_fee>
  </fees>
  <fees member_group="00400F" mail_retail="RETAIL">
    <admin_fee>1.335</admin_fee>
    <processing_fee>1.645</processing_fee>
  </fees>
  <fees member_group="00460G" mail_retail="MAIL">
    <admin_fee>0.88</admin_fee>
    <processing_fee>1.95</processing_fee>
  </fees>
</fee_config>"""

# 转换XML为字典,参数dict_constructor=dict确保输出是普通字典
result_dict = xmltodict.parse(xml_content, dict_constructor=dict)

# 查看转换后的结果
print(result_dict)

转换后的结构说明

转换后的字典会保留XML的层级关系:

  • 根节点fee_config作为顶层键,对应的是一个包含fees列表的字典
  • 每个fees节点的属性(比如member_group、mail_retail)会以@开头的键存在字典里
  • 子节点(比如admin_fee、processing_fee)直接作为普通键,值就是节点内的文本

比如其中一个fees项的结构是:

{
    '@member_group': '00400F',
    '@mail_retail': 'MAIL',
    'admin_fee': '0.76',
    'processing_fee': '1.83'
}

不用第三方库的方案(标准库实现)

如果不想依赖第三方库,可以用Python标准库的xml.etree.ElementTree来手动解析,代码会繁琐一点,但也能实现:

import xml.etree.ElementTree as ET

# 解析XML
root = ET.fromstring(xml_content)
result_dict = {'fee_config': {'fees': []}}

for fees_node in root.findall('fees'):
    fee_item = {
        'member_group': fees_node.attrib.get('member_group'),
        'mail_retail': fees_node.attrib.get('mail_retail'),
        'admin_fee': fees_node.find('admin_fee').text,
        'processing_fee': fees_node.find('processing_fee').text
    }
    result_dict['fee_config']['fees'].append(fee_item)

print(result_dict)

这个方案需要手动遍历节点和属性,适合对XML结构完全明确的场景。

内容的提问来源于stack exchange,提问作者Snow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:41:11