lxml 是基于 libxml2/libxslt 的高效 XML/HTML 处理库,支持 XPath、XSLT 和命名空间;常用 fromstring/parse 解析、XPath 提取、Element 构建和 iterparse 流式处理。
lxml 是 Python 中最强大、最常用的 XML/HTML 处理库之一,底层基于 C 的 libxml2 和 libxslt,比标准库 xml.etree.ElementTree 更快、功能更全,尤其适合处理大文件、需要 XPath、XSLT 或命名空间的场景。
用 etree.fromstring() 解析字符串,etree.parse() 解析文件(支持本地路径或类文件对象):
root = etree.fromstring(xml_str)
tree = etree.parse("data.xml"); root = tree.getroot()
parser=etree.XMLParser(recover=True) 可跳过格式错误继续解析(慎用于生产数据校验)ElementTree 的 find() 只支持简单路径,而 lxml 支持完整 XPath 1.0 表达式,性能好、表达力强:
titles = root.xpath("//book/title/text()") —— 一行取所有 title 文本expensive = root.xpath('//book[price > 30]/title/text()') —— 带条件过滤first_author = root.xpath('(//author)[1]/text()')[0] —— 索引和函数支持别用 f",易出标签/属性转义问题。用 Element 构建 + etree.SubElement() + tostring():
root = etree.Element("library")book = etree.SubElement(root, "book", id="123") —— 自动转义属性值title = etree.SubElement(book, "title").text = "Python & XML" —— 自动转义文本中的
xml_bytes = etree.tostring(root, encoding="utf-8", pretty_print=True, xml_declaration=True)真实 XML 常含 namespace(如 SOAP、RSS),lxml 支持前缀映射;对超大 XML,用 iterparse() 流式处理防内存爆炸:

ns = {"ns": "http://example.com/ns"},然后 root.xpath("//ns:book", namespaces=ns)
for event, elem in etree.iterparse("huge.xml", events=("start", "end")): —— 边读边处理,用完 elem.clear() 释放子节点内存method="html" 可输出无闭合标签的 HTML 风格(如
)基本上就这些。掌握 fromstring / parse、XPath 提取、Element 构建、iterparse 流式处理,就能覆盖 95% 的 XML 场景。不复杂但容易忽略细节——比如忘记命名空间映射,或没清内存导致 OOM。