跳转至

Python3 XML 解析

概念与用途

XML 以元素、属性和文本表达树形数据。标准库 xml.etree.ElementTree 可处理可信、规模适中的 XML,并支持路径查找和构造输出。

核心 API

ET.fromstring() 解析字符串,ET.parse() 解析文件,findall() 查询节点,Element 与 SubElement 构建文档。

import xml.etree.ElementTree as ET

xml = "<users><user id='1'>Alice</user><user id='2'>Bob</user></users>"
root = ET.fromstring(xml)
for user in root.findall("user"):
    print(user.get("id"), user.text)

API 与规模

API 适用输入 注意
fromstring() 小型内存文本 一次构建整棵树
parse() 文件对象 仍构建整棵树
iterparse() 大型文档 处理后清理元素
tostring() 序列化元素 编码与 XML 声明

示例:构造 XML

import xml.etree.ElementTree as ET

root = ET.Element("users")
user = ET.SubElement(root, "user", {"id": "1"})
user.text = "Alice & Bob"
payload = ET.tostring(root, encoding="unicode")
print(payload)

ElementTree 会正确转义文本,但不能替代 schema 校验。标准库无需安装;不可信 XML 推荐安装并使用 defusedxml,同时在接收层限制字节数和处理时间。

常见错误与安全注意

  • 不可信 XML 可能触发实体扩展等攻击,使用 defusedxml 并限制输入大小。
  • 命名空间会改变标签名称,查询时需提供前缀映射。
  • 大文件应使用 iterparse() 流式处理并及时清理节点。