untangle 是纯 Python 轻量级 XML 解析库,支持点号访问元素、属性直取、同名节点自动转列表及字符串解析;不支持命名空间和 XPath,适用于结构清晰的扁平 XML 场景。

untangle 是一个轻量级 Python 库,专为快速解析 XML 并以属性方式访问元素而设计。它不依赖外部 C 库(如 libxml2),纯 Python 实现,安装简单,适合结构清晰、嵌套不深的 XML 场景。
安装与基本用法
通过 pip 安装:
pip install untangle
加载 XML 后,根节点自动转为对象,子元素可通过点号(.)直接访问:
立即学习“Python免费学习笔记(深入)”;
例如,对如下 XML:
代码可写为:
obj = untangle.parse('data.xml')
print(obj.root.name.cdata) # 输出:Alice
print(obj.root.age.cdata) # 输出:30
处理带属性和多层嵌套的 XML
XML 中的属性(attribute)会作为对象属性直接暴露;嵌套层级对应点号链式调用:
示例 XML:
对应访问方式:
- obj.book['id'] → 获取属性值 "123"
- obj.book.title['lang'] → 获取 "en"
- obj.book.title.cdata → 获取文本内容 "Python Guide"
- obj.book.author.cdata → 获取 "John"
处理同名多个子节点(列表形式)
当某标签出现多次(如
XML 示例:
访问方式:
- obj.library.item[0].cdata → "A"
- obj.library.item[1].cdata → "B"
- 也可用 for item in obj.library.item: 遍历
从字符串而非文件解析
若 XML 来自 API 响应或变量字符串,用 untangle.parse_string():
xml_str = '
obj = untangle.parse_string(xml_str)
print(obj.data.value.cdata) # 输出:42
注意事项与局限
untangle 不做命名空间处理,也不支持 XPath 查询;遇到复杂 XML(如混合文本+标签、CDATA 块、注释等)可能无法准确还原结构。它适合“结构规整、读取为主”的场景——比如配置文件、RSS 简单条目、API 返回的扁平数据。
如果 XML 层级深、含命名空间或需修改/生成,建议换用 xml.etree.ElementTree 或 lxml。










