| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426 |
- lxml
- ====
- .. meta::
- :description: lxml - the most feature-rich and easy-to-use library for working with XML and HTML in the Python language
- :keywords: Python, XML, HTML, lxml, simple, ElementTree, etree, objectify, parsing, validation, XPath, XSLT
- .. 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
- -------------
- The complete lxml documentation is available for download as `PDF
- documentation`_. The HTML documentation from this web site is part of
- the normal `source download <#download>`_.
- * 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`_ as a reference
- * parsing_ and validating_ XML
- * `XPath and XSLT`_ support
- * Python `extension functions`_ for XPath and XSLT
- * `custom element classes`_ for custom XML APIs (see `EuroPython 2008 talk`_)
- * 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
- .. _`EuroPython 2008 talk`: s5/lxml-ep2008.html
- .. _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
- release version first.
- The latest version is `lxml 2.2.2`_, released 2009-06-21
- (`changes for 2.2.2`_). `Older versions`_ are listed below.
- Please take a look at the `installation instructions`_!
- This complete web site (including the generated API documentation) is
- part of the source distribution, so if you want to download the
- documentation for offline use, take the source archive and copy the
- ``doc/html`` directory out of the source tree.
- 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 the `Subversion repository`_ through the web, or
- take a look at the `Subversion history`_. 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.
- .. _`lxml at the Python Package Index`: http://pypi.python.org/pypi/lxml/
- .. _`this key`: pubkey.asc
- .. _`Older versions`: #old-versions
- .. _`installation instructions`: installation.html
- .. _`how to build lxml from source`: build.html
- .. _`Subversion repository`: http://codespeak.net/svn/lxml/
- .. _`Subversion history`: https://codespeak.net/viewvc/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%2Fmailman%2Flistinfo%2Flxml-dev+
- 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
- ------------
- See the web sites of lxml `1.3 <http://codespeak.net/lxml/1.3/>`_,
- `2.0 <http://codespeak.net/lxml/2.0/>`_, `2.1
- <http://codespeak.net/lxml/2.1/>`_ and the `current in-development
- version <http://codespeak.net/lxml/dev/>`_.
- .. _`PDF documentation`: lxmldoc-2.2.2.pdf
- * `lxml 2.2.1`_, released 2009-06-02 (`changes for 2.2.1`_)
- * `lxml 2.2`_, released 2009-03-21 (`changes for 2.2`_)
- * `lxml 2.2beta4`_, released 2009-02-27 (`changes for 2.2beta4`_)
- * `lxml 2.2beta3`_, released 2009-02-17 (`changes for 2.2beta3`_)
- * `lxml 2.2beta2`_, released 2009-01-25 (`changes for 2.2beta2`_)
- * `lxml 2.2beta1`_, released 2008-12-12 (`changes for 2.2beta1`_)
- * `lxml 2.2alpha1`_, released 2008-11-23 (`changes for 2.2alpha1`_)
- * `lxml 2.1.5`_, released 2009-01-06 (`changes for 2.1.5`_)
- * `lxml 2.1.4`_, released 2008-12-12 (`changes for 2.1.4`_)
- * `lxml 2.1.3`_, released 2008-11-17 (`changes for 2.1.3`_)
- * `lxml 2.1.2`_, released 2008-09-05 (`changes for 2.1.2`_)
- * `lxml 2.1.1`_, released 2008-07-24 (`changes for 2.1.1`_)
- * `lxml 2.1`_, released 2008-07-09 (`changes for 2.1`_)
- * `lxml 2.0.11`_, released 2008-12-12 (`changes for 2.0.11`_)
- * `lxml 2.0.10`_, released 2008-11-17 (`changes for 2.0.10`_)
- * `lxml 2.0.9`_, released 2008-09-05 (`changes for 2.0.9`_)
- * `lxml 2.0.8`_, released 2008-07-24 (`changes for 2.0.8`_)
- * `lxml 2.0.7`_, released 2008-06-20 (`changes for 2.0.7`_)
- * `lxml 2.0.6`_, released 2008-05-31 (`changes for 2.0.6`_)
- * `lxml 2.0.5`_, released 2008-05-01 (`changes for 2.0.5`_)
- * `lxml 2.0.4`_, released 2008-04-14 (`changes for 2.0.4`_)
- * `lxml 2.0.3`_, released 2008-03-26 (`changes for 2.0.3`_)
- * `lxml 2.0.2`_, released 2008-02-22 (`changes for 2.0.2`_)
- * `lxml 2.0.1`_, released 2008-02-13 (`changes for 2.0.1`_)
- * `lxml 2.0`_, released 2008-02-01 (`changes for 2.0`_)
- * `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.2.2`: lxml-2.2.2.tgz
- .. _`lxml 2.2.1`: lxml-2.2.1.tgz
- .. _`lxml 2.2`: lxml-2.2.tgz
- .. _`lxml 2.2beta4`: lxml-2.2beta4.tgz
- .. _`lxml 2.2beta3`: lxml-2.2beta3.tgz
- .. _`lxml 2.2beta2`: lxml-2.2beta2.tgz
- .. _`lxml 2.2beta1`: lxml-2.2beta1.tgz
- .. _`lxml 2.2alpha1`: lxml-2.2alpha1.tgz
- .. _`lxml 2.1.5`: lxml-2.1.5.tgz
- .. _`lxml 2.1.4`: lxml-2.1.4.tgz
- .. _`lxml 2.1.3`: lxml-2.1.3.tgz
- .. _`lxml 2.1.2`: lxml-2.1.2.tgz
- .. _`lxml 2.1.1`: lxml-2.1.1.tgz
- .. _`lxml 2.1`: lxml-2.1.tgz
- .. _`lxml 2.0.11`: lxml-2.0.11.tgz
- .. _`lxml 2.0.10`: lxml-2.0.10.tgz
- .. _`lxml 2.0.9`: lxml-2.0.9.tgz
- .. _`lxml 2.0.8`: lxml-2.0.8.tgz
- .. _`lxml 2.0.7`: lxml-2.0.7.tgz
- .. _`lxml 2.0.6`: lxml-2.0.6.tgz
- .. _`lxml 2.0.5`: lxml-2.0.5.tgz
- .. _`lxml 2.0.4`: lxml-2.0.4.tgz
- .. _`lxml 2.0.3`: lxml-2.0.3.tgz
- .. _`lxml 2.0.2`: lxml-2.0.2.tgz
- .. _`lxml 2.0.1`: lxml-2.0.1.tgz
- .. _`lxml 2.0`: lxml-2.0.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.2.2`: changes-2.2.2.html
- .. _`changes for 2.2.1`: changes-2.2.1.html
- .. _`changes for 2.2`: changes-2.2.html
- .. _`changes for 2.2beta4`: changes-2.2beta4.html
- .. _`changes for 2.2beta3`: changes-2.2beta3.html
- .. _`changes for 2.2beta2`: changes-2.2beta2.html
- .. _`changes for 2.2beta1`: changes-2.2beta1.html
- .. _`changes for 2.2alpha1`: changes-2.2alpha1.html
- .. _`changes for 2.1.5`: changes-2.1.5.html
- .. _`changes for 2.1.4`: changes-2.1.4.html
- .. _`changes for 2.1.3`: changes-2.1.3.html
- .. _`changes for 2.1.2`: changes-2.1.2.html
- .. _`changes for 2.1.1`: changes-2.1.1.html
- .. _`changes for 2.1`: changes-2.1.html
- .. _`changes for 2.0.11`: changes-2.0.11.html
- .. _`changes for 2.0.10`: changes-2.0.10.html
- .. _`changes for 2.0.9`: changes-2.0.9.html
- .. _`changes for 2.0.8`: changes-2.0.8.html
- .. _`changes for 2.0.7`: changes-2.0.7.html
- .. _`changes for 2.0.6`: changes-2.0.6.html
- .. _`changes for 2.0.5`: changes-2.0.5.html
- .. _`changes for 2.0.4`: changes-2.0.4.html
- .. _`changes for 2.0.3`: changes-2.0.3.html
- .. _`changes for 2.0.2`: changes-2.0.2.html
- .. _`changes for 2.0.1`: changes-2.0.1.html
- .. _`changes for 2.0`: changes-2.0.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
|