xmltodict是纯Python实现的轻量库,可双向转换XML与嵌套字典:parse()将XML转为字典(同名子节点默认转列表),unparse()将字典转回格式化XML,支持属性、命名空间及编码处理。

xmltodict 是一个轻量但非常实用的 Python 库,能把 XML 字符串直接转成嵌套字典(dict),也能把字典再转回格式良好的 XML。它不依赖外部 C 库,纯 Python 实现,安装简单,适合快速解析或生成结构清晰的 XML(比如配置文件、API 响应等)。
安装与基础用法
先用 pip 安装:
pip install xmltodict
导入后,核心就是两个函数:parse() 和 unparse():
立即学习“Python免费学习笔记(深入)”;
- xmltodict.parse(xml_string):把 XML 字符串转为 Python 字典(支持 bytes 或 str)
-
xmltodict.unparse(dict_obj, pretty=True):把字典转回 XML 字符串,
pretty=True会自动缩进美化输出
XML → 字典:处理常见结构
默认情况下,xmltodict 会把同名子节点合并为列表(即使只有一个),避免歧义。例如:
会被转成:
{'root': {'item': ['a', 'b']}}
如果想让单个节点也保持为列表(统一类型),加参数 force_list=('item',);如果确定某节点永远只有一个,想让它直接是字符串而非单元素列表,可用 process_namespaces=False 配合自定义 postprocessor 处理。
字典 → XML:注意键名和层级规则
字典结构需符合一定约定才能正确生成 XML:
- 最外层推荐用一个顶层键(如
{'root': {...}}),否则生成的 XML 没有根节点 - 键名即 XML 标签名,值为内容;若要加属性,在对应值里用
@attr_name键(如'id': {'@type': 'int', '#text': '123'}生成)123 - 文本内容用
#text键表示;混合内容(文本+子节点)时,#text和子键可共存
实用小技巧
处理带命名空间的 XML?可以开启 process_namespaces=True,并用 namespace_separator=':' 控制前缀风格;读取文件时,先用 open(...).read() 加载内容再 parse;遇到编码问题(如 GBK),先用 bytes.decode('gbk') 转成 str 再传入 parse。
基本上就这些 —— 不复杂但容易忽略细节,用熟了比 xml.etree.ElementTree 更直觉。

