【问题标题】:What are the differences between lxml and ElementTree?lxml 和 ElementTree 有什么区别?
【发布时间】:2018-04-24 01:38:04
【问题描述】:
说到generating XML data in Python,我经常看到推荐两个库:lxml和ElementTree
据我所知,这两个库彼此非常相似。它们似乎都有相似的模块名称、使用指南和功能。甚至导入语句也非常相似。
# Importing lxml and ElementTree
import lxml.etree
import xml.etree.ElementTree
用于 Python 的 lxml 和 ElementTree 库之间有什么区别?
【问题讨论】:
标签:
python
lxml
elementtree
【解决方案1】:
ElementTree 内置于 Python 标准库中,其中包括其他数据模块类型,例如 json 和 csv。这意味着该模块随 Python 的每个安装一起提供。对于大多数普通的 XML 操作,包括构建文档树以及元素属性和节点值的简单搜索和解析,甚至命名空间,ElementTree 是一个可靠的处理程序。
Lxml 是需要安装的第三方模块。在许多方面lxml 实际上扩展 ElementTree 因为内置模块中的大多数操作都可用。这个扩展中最主要的是lxml 支持 XPath 1.0 和 XSLT 1.0。此外,lxml 可以解析不符合 XML 的 HTML 文档,因此可用于网络抓取操作,甚至可以用作 BeautifulSoup 中的解析器和 Pandas 中的引擎 pandas.read_html()。 lxml 的其他有用的常见功能包括 pretty_print 输出、objectify 和 sax 支持。当然,作为第三方模块,与标准库相比,具有附加功能的版本也很容易访问。
【解决方案2】:
我不会说 lxml 比 ET 快,因为这两个模块都提供了大量的功能。为了提供一点上下文,ElementTree 还支持 XPath,但特别是 ET 有一个独特且有用的函数,称为 iterparse(),它将 XML 文档重新制作为可迭代的。这导致解析速度更快,尤其是对于大型 XML 文件。
ET API 本身创建元素类型,它们是列表和字典之间的混合交叉。对于刚接触该模块的人来说,这可能会让人头疼,但坐下来,您会发现它非常灵活。