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

Python的xmltodict库怎么用 XML与字典互转  第1张

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 会把同名子节点合并为列表(即使只有一个),避免歧义。例如:

ab

会被转成:

{'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 更直觉。