讲师中心 微信公众号
AI工具推荐 视频效率加速

Python如何将XML转换为字典列表

阿枫吖_8112

阿枫吖_8112

发布时间:2026-01-01 08:45:55

|

494人浏览过

|

来源于php中文网

原创

xmltodict处理同名节点需设force_list参数,否则默认合并为字典;属性转为@key,文本为#text,嵌套结构需手动提取;不规范XML应先用ElementTree校验。

python如何将xml转换为字典列表

用 xmltodict 处理单层同名节点最直接

当 XML 中存在多个同级同名标签(比如 <item>),xmltodict.parse() 默认会把它们合并成一个字典,而不是列表——这是最容易踩的坑。必须显式传入 force_list 参数才能保留为列表结构。

常见错误现象:

{'root': {'item': {'name': 'a'}}}
(只留了一个)而非
{'root': {'item': [{'name': 'a'}, {'name': 'b'}]}}

  • 对所有 item 标签强制转为列表:force_list=['item']
  • 若想统一处理所有重复标签,可设 force_list=True,但要注意这会让所有标签都变成列表(包括只出现一次的),后续取值需写 [0]
  • 配合 process_namespaces=False(默认值)避免命名空间干扰,除非你明确需要解析带 xmlns 的 XML

嵌套结构里 list 和 dict 混用要手动 flatten

xmltodict 不会自动“扁平化”路径,比如 <data><items><item><name>A</name></item></items></data> 解析后是

{'data': {'items': {'item': {'name': 'A'}}}}
,而你想要的是 [{'name': 'A'}]。这时候不能只靠参数,得自己提取路径。

  • 先用 xmltodict.parse(xml_str, force_list=['item']) 得到嵌套结构
  • 再用字典键路径访问:例如 result['data']['items']['item'] —— 注意这里已经是列表(因为加了 force_list)
  • 如果不确定某层是否存在,用 .get('items', {}).get('item', []) 避免 KeyError

遇到属性(@attr)和文本(#text)要小心类型混杂

XML 中的属性(如 <item id="123">abc</item>)会被 xmltodict 转成 {'@id': '123', '#text': 'abc'}。如果你只需要纯内容,这些键名会干扰字段一致性。

Python Testing
Python Testing

Python 测试速查:运行 pytest、使用 mock/patch、参数化、fixtures、异步、覆盖率测试。

下载

立即学习“Python免费学习笔记(深入)”;

  • 遍历列表时逐个清理:{k[1:]: v for k, v in item.items() if k.startswith('@')} 提取属性,或过滤掉 @ 和 #text
  • 若文本是唯一内容且无属性,可用 item.get('#text', item) 回退取值
  • 不要依赖 str(item) 或 json.dumps 直接输出——#text 会导致字段名不统一

不用第三方库?标准库 xml.etree.ElementTree 更可控但更啰嗦

如果项目禁用外部依赖,xml.etree.ElementTree 是唯一选择,但它不自动生成字典,得手写递归逻辑。好处是能精确控制每个节点怎么转,坏处是容易漏掉属性、文本、命名空间等边缘情况。

  • 用 elem.attrib 取属性,elem.text.strip() 取文本内容
  • 子节点用 list(elem) 遍历,对每个子节点递归调用转换函数
  • 判断是否为同名多节点:先收集所有 elem.findall('item'),再逐个转字典,最后汇总成列表
import xml.etree.ElementTree as ET
<p>def elem_to_dict(elem):
result = {k: v for k, v in elem.attrib.items()}
if elem.text and elem.text.strip():
result['#text'] = elem.text.strip()
for child in elem:
child_data = elem_to_dict(child)
if child.tag not in result:
result[child.tag] = child_data
else:</p><h1>已存在,转为列表</h1><pre class='brush:php;toolbar:false;'>        if not isinstance(result[child.tag], list):
            result[child.tag] = [result[child.tag]]
        result[child.tag].append(child_data)
return result

root = ET.fromstring(xml_str) data = {root.tag: elem_to_dict(root)}

真正麻烦的不是转换本身,而是 XML 源数据是否规范——有没有混用属性和文本、有没有缺闭合标签、有没有非法字符。建议先用 xml.etree.ElementTree.parse() 尝试加载,捕获 ParseError,比硬转字典更早发现问题。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

1975

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2702

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

936

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

3019

2025.09.10

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

4004

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

5137

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

2282

2024.11.28

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

80

2026.09.23

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

20

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn