ElementTree comes built-in with the Python standard library which includes other data modules types such as json
and csv
. This means the module ships with each installation of Python. For most normal XML operations including building document trees and simple searching and parsing of element attributes and node values, even namespaces, ElementTree
is a reliable handler.
Lxml is a third-party module that requires installation. In many ways lxml
actually extends ElementTree
as most operations in the built-in module are available. Chief among this extension is that lxml
supports both XPath 1.0 and XSLT 1.0. Additionally, lxml
can parse HTML documents that are not XML compliant and hence is used for web-scraping operations and even as the parser in BeautifulSoup and engine in Pandas, pandas.read_html()
. Other useful, common features of lxml include pretty_print output, objectify
, and sax
support. Of course too as a third-party module, versions with additional features are readily accessible compared to the standard library.
lxml
is significantly faster, can be used to parse HTML, and supports XPath. There is specifically a section in the lxml documentation explaining the differences. – Borgeslxml
is also easier to use with namespaces – Gabriellia