在Python生态中解析XML并不总是件轻松的事,标准库提供的方案偏底层且写法啰嗦。untangle是一个开源小库,它把XML节点变成对象的属性,让我们可以用obj.node.subnode.text这样的方式取数据。下面先看一张示意图了解它的映射思路。

安装与快速开始
untangle可以通过pip直接安装,无需额外依赖。安装完成后,用parse方法即可加载XML。
# 安装命令(终端执行) # pip install untangle import untangle xml_string = """ <user> <name>张三</name> <age>28</age> </user> """ obj = untangle.parse(xml_string) print(obj.user.name.cdata) # 输出: 张三 print(obj.user.age.cdata) # 输出: 28
从文件或网址加载
除了字符串,untangle也支持直接从本地文件和HTTP地址解析,这对爬取或对接第三方接口很有用。
import untangle
# 从本地文件读取
doc = untangle.parse("./data.xml")
# 从网址读取,注意示例域名已替换
url = "https://api.ipipp.com/v1/config.xml"
doc2 = untangle.parse(url)
print(doc2.root.version.cdata)
处理属性与重复节点
XML元素常常带有属性,也会出现同名的多个子节点。untangle把属性挂在对象的特定字段上,重复节点则变成可迭代的列表。
import untangle
xml = """
<books>
<book id="1">Python入门</book>
<book id="2">XML实战</book>
</books>
"""
doc = untangle.parse(xml)
for book in doc.books.book:
# 属性通过 _attributes 字典获取
print(book._attributes["id"], book.cdata)
使用注意点
- 节点文本统一放在cdata属性里,即使没有子节点也要用cdata取内容。
- 如果XML里含有命名空间,对象属性名会包含完整带前缀的名称。
- untangle适合中小体积XML,超大文件建议用流式解析库。
小结
untangle用极少的代码完成了XML到Python对象的映射,降低了处理配置和接口数据的门槛。当你不想写复杂 XPath 或遍历DOM时,它是一个顺手的选择。