Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

342 lines (242 sloc) 11.401 kB
lxml
====
.. meta::
:description: lxml - the most feature-rich and easy-to-use library for working with XML and HTML in the Python language
:keywords: lxml, etree, objectify, Python, XML, HTML
.. class:: pagequote
| `» lxml takes all the pain out of XML. « <http://thread.gmane.org/gmane.comp.python.lxml.devel/3252/focus=3258>`_
| Stephan Richter
.. class:: eyecatcher
| lxml is the most feature-rich
| and easy-to-use library
| for working with XML and HTML
| in the Python language.
..
1 Introduction
2 Documentation
3 Download
4 Mailing list
5 Bug tracker
6 License
7 Old Versions
Introduction
------------
lxml is a Pythonic binding for the libxml2_ and libxslt_ libraries. It is
unique in that it combines the speed and feature completeness of these
libraries with the simplicity of a native Python API, mostly compatible but
superior to the well-known ElementTree_ API. See the introduction_ for more
information about background and goals. Some common questions are answered in
the FAQ_.
.. _libxml2: http://xmlsoft.org
.. _libxslt: http://xmlsoft.org/XSLT
.. _introduction: intro.html
.. _FAQ: FAQ.html
Documentation
-------------
* ElementTree:
* `ElementTree API`_
* compatibility_ and differences of lxml.etree
* `benchmark results`_
* lxml.etree:
* the `lxml.etree Tutorial`_
* `lxml.etree specific API`_ documentation
* the `generated API documentation`_
* parsing_ and validating_ XML
* `XPath and XSLT`_ support
* Python `extension functions`_ for XPath and XSLT
* `custom element classes`_ for custom XML APIs
* a `SAX compliant API`_ for interfacing with other XML tools
* a `C-level API`_ for interfacing with external C/Pyrex modules
* lxml.objectify:
* `lxml.objectify`_ API documentation
* a brief comparison of `objectify and etree`_
lxml.etree follows the ElementTree_ API as much as possible, building it on
top of the native libxml2 tree. If you are new to ElementTree, start with the
`lxml.etree Tutorial`_. See also the ElementTree compatibility_ overview and
the `benchmark results`_ comparing lxml to the original ElementTree_ and
cElementTree_ implementations.
Right after the `lxml.etree Tutorial`_ and the ElementTree_ documentation, the
most important place to look is the `lxml.etree specific API`_ documentation.
It describes how lxml extends the ElementTree API to expose libxml2 and
libxslt specific functionality, such as XPath_, `Relax NG`_, `XML Schema`_,
`XSLT`_, and `c14n`_. Python code can be called from XPath expressions and
XSLT stylesheets through the use of `extension functions`_. lxml also offers
a `SAX compliant API`_, that works with the SAX support in the standard
library.
There is a separate module `lxml.objectify`_ that implements a data-binding
API on top of lxml.etree. See the `objectify and etree`_ FAQ entry for a
comparison.
In addition to the ElementTree API, lxml also features a sophisticated API for
`custom element classes`_. This is a simple way to write arbitrary XML driven
APIs on top of lxml. As of version 1.1, lxml.etree has a new `C-level API`_
that can be used to efficiently extend lxml.etree in external C modules,
including custom element class support.
.. _ElementTree: http://effbot.org/zone/element-index.htm
.. _`ElementTree API`: http://effbot.org/zone/element-index.htm#documentation
.. _cElementTree: http://effbot.org/zone/celementtree.htm
.. _`lxml.etree Tutorial`: tutorial.html
.. _`generated API documentation`: api/index.html
.. _`benchmark results`: performance.html
.. _`compatibility`: compatibility.html
.. _`lxml.etree specific API`: api.html
.. _`parsing`: parsing.html
.. _`validating`: validation.html
.. _`XPath and XSLT`: xpathxslt.html
.. _`extension functions`: extensions.html
.. _`custom element classes`: element_classes.html
.. _`SAX compliant API`: sax.html
.. _`C-level API`: capi.html
.. _`lxml.objectify`: objectify.html
.. _`objectify and etree`: FAQ.html#what-is-the-difference-between-lxml-etree-and-lxml-objectify
.. _XPath: http://www.w3.org/TR/xpath
.. _`Relax NG`: http://www.relaxng.org/
.. _`XML Schema`: http://www.w3.org/XML/Schema
.. _`XSLT`: http://www.w3.org/TR/xslt
.. _`c14n`: http://www.w3.org/TR/xml-c14n
Download
--------
The best way to download lxml is to visit `lxml at the Python Package
Index`_ (PyPI). It has the source that compiles on various platforms.
The source distribution is signed with `this key`_. Binary builds for
MS Windows usually become available through PyPI a few days after a
source release. If you can't wait, consider trying a less recent
version first.
.. _`lxml at the Python Package Index`: http://pypi.python.org/pypi/lxml/
.. _`this key`: pubkey.asc
The latest version is `lxml 2.0`_, released 2008-02-01
(`changes for 2.0`_). `Older versions`_ are listed below.
.. _`Older versions`: #old-versions
Please take a look at the `installation instructions`_!
.. _`installation instructions`: installation.html
It's also possible to check out the latest development version of lxml
from svn directly, using a command like this::
svn co http://codespeak.net/svn/lxml/trunk lxml
You can also `browse it through the web`_. Please read `how to build lxml
from source`_ first. The `latest CHANGES`_ of the developer version are also
accessible. You can check there if a bug you found has been fixed or a
feature you want has been implemented in the latest trunk version.
.. _`how to build lxml from source`: build.html
.. _`browse it through the web`: http://codespeak.net/svn/lxml
.. _`latest CHANGES`: http://codespeak.net/svn/lxml/trunk/CHANGES.txt
Mailing list
------------
Questions? Suggestions? Code to contribute? We have a `mailing list`_.
You can search the archive with Gmane_ or Google_.
.. _`mailing list`: http://codespeak.net/mailman/listinfo/lxml-dev
.. _Gmane: http://blog.gmane.org/gmane.comp.python.lxml.devel
.. _Google: http://www.google.com/webhp?q=site:codespeak.net/mailman/listinfo/lxml-dev%20
Bug tracker
-----------
lxml uses the `launchpad bug tracker`_. If you are sure you found a bug in
lxml, please file a bug report there. If you are not sure whether some
unexpected behaviour of lxml is a bug or not, please ask on the `mailing
list`_ first. Do not forget to search the archive (e.g. with Gmane_)!
.. _`launchpad bug tracker`: https://launchpad.net/lxml
License
-------
The lxml library is shipped under a `BSD license`_. libxml2 and libxslt2
itself are shipped under the `MIT license`_. There should therefore be no
obstacle to using lxml in your codebase.
.. _`BSD license`: http://codespeak.net/svn/lxml/trunk/doc/licenses/BSD.txt
.. _`MIT license`: http://www.opensource.org/licenses/mit-license.html
Old Versions
------------
* `lxml 2.0beta2`_, released 2008-01-26 (`changes for 2.0beta2`_)
* `lxml 2.0beta1`_, released 2008-01-11 (`changes for 2.0beta1`_)
* `lxml 2.0alpha6`_, released 2007-12-19 (`changes for 2.0alpha6`_)
* `lxml 2.0alpha5`_, released 2007-11-24 (`changes for 2.0alpha5`_)
* `lxml 2.0alpha4`_, released 2007-10-07 (`changes for 2.0alpha4`_)
* `lxml 2.0alpha3`_, released 2007-09-26 (`changes for 2.0alpha3`_)
* `lxml 2.0alpha2`_, released 2007-09-15 (`changes for 2.0alpha2`_)
* `lxml 2.0alpha1`_, released 2007-09-02 (`changes for 2.0alpha1`_)
* `lxml 1.3.6`_, released 2007-10-29 (`changes for 1.3.6`_)
* `lxml 1.3.5`_, released 2007-10-22 (`changes for 1.3.5`_)
* `lxml 1.3.4`_, released 2007-08-30 (`changes for 1.3.4`_)
* `lxml 1.3.3`_, released 2007-07-26 (`changes for 1.3.3`_)
* `lxml 1.3.2`_, released 2007-07-03 (`changes for 1.3.2`_)
* lxml 1.3.1, released 2007-07-02 (`changes for 1.3.1`_)
* `lxml 1.3`_, released 2007-06-24 (`changes for 1.3`_)
* `lxml 1.2.1`_, released 2007-02-27 (`changes for 1.2.1`_)
* `lxml 1.2`_, released 2007-02-20 (`changes for 1.2`_)
* `lxml 1.1.2`_, released 2006-10-30 (`changes for 1.1.2`_)
* `lxml 1.1.1`_, released 2006-09-21 (`changes for 1.1.1`_)
* `lxml 1.1`_, released 2006-09-13 (`changes for 1.1`_)
* `lxml 1.0.4`_, released 2006-09-09 (`changes for 1.0.4`_)
* `lxml 1.0.3`_, released 2006-08-08 (`changes for 1.0.3`_)
* `lxml 1.0.2`_, released 2006-06-27 (`changes for 1.0.2`_)
* `lxml 1.0.1`_, released 2006-06-09 (`changes for 1.0.1`_)
* `lxml 1.0`_, released 2006-06-01 (`changes for 1.0`_)
* `lxml 0.9.2`_, released 2006-05-10 (`changes for 0.9.2`_)
* `lxml 0.9.1`_, released 2006-03-30 (`changes for 0.9.1`_)
* `lxml 0.9`_, released 2006-03-20 (`changes for 0.9`_)
* `lxml 0.8`_, released 2005-11-03 (`changes for 0.8`_)
* `lxml 0.7`_, released 2005-06-15 (`changes for 0.7`_)
* `lxml 0.6`_, released 2005-05-14 (`changes for 0.6`_)
* `lxml 0.5.1`_, released 2005-04-09 (`changes for 0.5.1`_)
* `lxml 0.5`_, released 2005-04-08
.. _`lxml 2.0`: lxml-2.0.tgz
.. _`lxml 2.0beta2`: lxml-2.0beta2.tgz
.. _`lxml 2.0beta1`: lxml-2.0beta1.tgz
.. _`lxml 2.0alpha6`: lxml-2.0alpha6.tgz
.. _`lxml 2.0alpha5`: lxml-2.0alpha5.tgz
.. _`lxml 2.0alpha4`: lxml-2.0alpha4.tgz
.. _`lxml 2.0alpha3`: lxml-2.0alpha3.tgz
.. _`lxml 2.0alpha2`: lxml-2.0alpha2.tgz
.. _`lxml 2.0alpha1`: lxml-2.0alpha1.tgz
.. _`lxml 1.3.6`: lxml-1.3.6.tgz
.. _`lxml 1.3.5`: lxml-1.3.5.tgz
.. _`lxml 1.3.4`: lxml-1.3.4.tgz
.. _`lxml 1.3.3`: lxml-1.3.3.tgz
.. _`lxml 1.3.2`: lxml-1.3.2.tgz
.. _`lxml 1.3`: lxml-1.3.tgz
.. _`lxml 1.2.1`: lxml-1.2.1.tgz
.. _`lxml 1.2`: lxml-1.2.tgz
.. _`lxml 1.1.2`: lxml-1.1.2.tgz
.. _`lxml 1.1.1`: lxml-1.1.1.tgz
.. _`lxml 1.1`: lxml-1.1.tgz
.. _`lxml 1.0.4`: lxml-1.0.4.tgz
.. _`lxml 1.0.3`: lxml-1.0.3.tgz
.. _`lxml 1.0.2`: lxml-1.0.2.tgz
.. _`lxml 1.0.1`: lxml-1.0.1.tgz
.. _`lxml 1.0`: lxml-1.0.tgz
.. _`lxml 0.9.2`: lxml-0.9.2.tgz
.. _`lxml 0.9.1`: lxml-0.9.1.tgz
.. _`lxml 0.9`: lxml-0.9.tgz
.. _`lxml 0.8`: lxml-0.8.tgz
.. _`lxml 0.7`: lxml-0.7.tgz
.. _`lxml 0.6`: lxml-0.6.tgz
.. _`lxml 0.5.1`: lxml-0.5.1.tgz
.. _`lxml 0.5`: lxml-0.5.tgz
.. _`changes for 2.0`: changes-2.0.html
.. _`changes for 2.0beta2`: changes-2.0beta2.html
.. _`changes for 2.0beta1`: changes-2.0beta1.html
.. _`changes for 2.0alpha6`: changes-2.0alpha6.html
.. _`changes for 2.0alpha5`: changes-2.0alpha5.html
.. _`changes for 2.0alpha4`: changes-2.0alpha4.html
.. _`changes for 2.0alpha3`: changes-2.0alpha3.html
.. _`changes for 2.0alpha2`: changes-2.0alpha2.html
.. _`changes for 2.0alpha1`: changes-2.0alpha1.html
.. _`changes for 1.3.6`: changes-1.3.6.html
.. _`changes for 1.3.5`: changes-1.3.5.html
.. _`changes for 1.3.4`: changes-1.3.4.html
.. _`changes for 1.3.3`: changes-1.3.3.html
.. _`changes for 1.3.2`: changes-1.3.2.html
.. _`changes for 1.3.1`: changes-1.3.1.html
.. _`changes for 1.3`: changes-1.3.html
.. _`changes for 1.2.1`: changes-1.2.1.html
.. _`changes for 1.2`: changes-1.2.html
.. _`changes for 1.1.2`: changes-1.1.2.html
.. _`changes for 1.1.1`: changes-1.1.1.html
.. _`changes for 1.1`: changes-1.1.html
.. _`changes for 1.0.4`: changes-1.0.4.html
.. _`changes for 1.0.3`: changes-1.0.3.html
.. _`changes for 1.0.2`: changes-1.0.2.html
.. _`changes for 1.0.1`: changes-1.0.1.html
.. _`changes for 1.0`: changes-1.0.html
.. _`changes for 0.9.2`: changes-0.9.2.html
.. _`changes for 0.9.1`: changes-0.9.1.html
.. _`changes for 0.9`: changes-0.9.html
.. _`changes for 0.8`: changes-0.8.html
.. _`changes for 0.7`: changes-0.7.html
.. _`changes for 0.6`: changes-0.6.html
.. _`changes for 0.5.1`: changes-0.5.1.html
Jump to Line
Something went wrong with that request. Please try again.