Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
lxml is a Pythonic, mature binding for the libxml2 and libxslt libraries. It provides safe and convenient access to these libraries using the ElementTree API.
It extends the ElementTree API significantly to offer support for XPath, RelaxNG, XML Schema, XSLT, C14N and much more.
To contact the project, go to the project home page <https://lxml.de/>
_ or see our bug tracker at
https://launchpad.net/lxml
In case you want to use the current in-development version of lxml,
you can get it from the github repository at
https://github.com/lxml/lxml . Note that this requires Cython to
build the sources, see the build instructions on the project home
page. To the same end, running easy_install lxml==dev
will
install lxml from
https://github.com/lxml/lxml/tarball/master#egg=lxml-dev if you have
an appropriate version of Cython installed.
After an official release of a new stable series, bug fixes may become
available at
https://github.com/lxml/lxml/tree/lxml-5.0 .
Running easy_install lxml==5.0bugfix
will install
the unreleased branch state from
https://github.com/lxml/lxml/tarball/lxml-5.0#egg=lxml-5.0bugfix
as soon as a maintenance branch has been established. Note that this
requires Cython to be installed at an appropriate version for the build.
Character escaping in C14N2
serialisation now uses a single pass over the text
instead of searching for each unescaped character separately.
Early support for Python 3.13a2 was added.
LP#1976304: The Element.addnext()
method previously inserted the new element
before existing tail text. The tail text of both sibling elements now stays on
the respective elements.
LP#1980767, GH#379: TreeBuilder.close()
could fail with a TypeError
after
parsing incorrect input. Original patch by Enrico Minack.
Element.itertext(with_tail=False)
returned the tail text of comments and
processing instructions, despite the explicit option.
GH#370: A crash with recent libxml2 2.11.x versions was resolved. Patch by Michael Schlenker.
A compile problem with recent libxml2 2.12.x versions was resolved.
The internal exception handling in C callbacks was improved for Cython 3.0.
The exception declarations of xmlInputReadCallback
, xmlInputCloseCallback
,
xmlOutputWriteCallback
and xmlOutputCloseCallback
in tree.pxd
were
corrected to prevent running Python code or calling into the C-API with a live
exception set.
GH#385: The long deprecated unittest.m̀akeSuite()
function is no longer used.
Patch by Miro Hrončok.
LP#1522052: A file-system specific test is now optional and should no longer fail on systems that don't support it.
GH#392: Some tests were adapted for libxml2 2.13. Patch by Nick Wellnhofer.
Contains all fixes from lxml 4.9.4.
LP#1742885: lxml no longer expands external entities (XXE) by default to prevent
the security risk of loading arbitrary files and URLs. If this feature is needed,
it can be enabled in a backwards compatible way by using a parser with the option
resolve_entities=True
. The new default is resolve_entities='internal'
.
With libxml2 2.10.4 and later (as provided by the lxml 5.0 binary wheels),
parsing HTML tags with "prefixes" no longer builds a namespace dictionary
in nsmap
but considers the prefix:name
string the actual tag name.
With older libxml2 versions, since 2.9.11, the prefix was removed. Before
that, the prefix was parsed as XML prefix.
lxml 5.0 does not try to hide this difference but now changes the ElementPath
implementation to let element.find("part1:part2")
search for the tag
part1:part2
in documents parsed as HTML, instead of looking only for part2
.
LP#2024343: The validation of the schema file itself is now optional in the
ISO-Schematron implementation. This was done because some lxml distributions
discard the RNG validation schema file due to licensing issues. The validation
can now always be disabled with Schematron(..., validate_schema=False)
.
It is enabled by default if available and disabled otherwise. The module
constant lxml.isoschematron.schematron_schema_valid_supported
can be used
to detect whether schema file validation is available.
Some redundant and long deprecated methods were removed:
parser.setElementClassLookup()
,
xslt_transform.apply()
,
xpath.evaluate()
.
Some incorrect declarations were removed from python.pxd
. In general, this file
should not be used by external Cython code. Use the C-API declarations provided by
Cython itself instead.
Binary wheels use the library versions libxml2 2.12.3 and libxslt 1.1.39.
Built with Cython 3.0.7, updated to follow recent changes in Cython 3.1-dev.