关于python:lxml和ElementTree有什么区别?

What are the differences between lxml and ElementTree?

在Python中生成XML数据时,经常会推荐使用两个库:lxml和ElementTree

据我所知,这两个库彼此非常相似。 它们似乎都具有相似的模块名称,使用准则和功能。 甚至import语句也非常相似。

1
2
3
 # Importing lxml and ElementTree
import lxml.etree
import xml.etree.ElementTree

Python的lxmlElementTree库之间有什么区别?


ElementTree内置于Python标准库中,该库包含其他数据模块类型,例如jsoncsv。这意味着该模块随Python的每次安装一起提供。对于大多数常规XML操作(包括构建文档树以及元素属性和节点值(甚至是名称空间)的简单搜索和解析),ElementTree是可靠的处理程序。

Lxml是需要安装的第三方模块。实际上,由于内置模块中的大多数操作可用,因此lxml实际上可以扩展ElementTree。此扩展的主要特点是lxml支持XPath 1.0和XSLT 1.0。另外,lxml可以解析不符合XML的HTML文档,因此可用于网络抓取操作,甚至可以用作BeautifulSoup中的解析器和Pandas中的引擎,pandas.read_html()。 lxml的其他有用的通用功能包括pretty_print输出,objectifysax支持。当然,作为第三方模块,与标准库相比,具有附加功能的版本也易于访问。


我不会说lxml全面比ET快,因为这两个模块都提供大量功能。为了提供一些上下文,ElementTree还支持XPath,但是特别是ET具有称为iterparse()的独特且有用的功能,该功能将XML文档重新构造为可迭代的。这样可以加快解析速度,尤其是对于大型XML文件。

ET API本身会创建元素类型,这些元素类型是列表和字典之间的混合交叉。对于那些刚接触该模块的人来说,这可能意味着头疼,但是请坐下来,您会发现它非常灵活。