lxml
====

Introduction
------------

lxml is a Pythonic binding for the libxml2_ and libxslt_ libraries. See
the introduction_ for more information about background and goals.

.. _libxml2: http://xmlsoft.org

.. _libxslt: http://xmlsoft.org/XSLT

.. _introduction: intro.html

Download
--------

The best way to download binary versions is to visit `lxml at the Python
cheeseshop`_.  It has the source, eggs and installers for various platforms.

.. _`lxml at the Python cheeseshop`: http://cheeseshop.python.org/pypi/lxml/

Please take a look at the `installation instructions`_!

.. _`installation instructions`: installation.html

* `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 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 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

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

Documentation
-------------

lxml follows the `ElementTree API`_ as much as possible, building it
on top of the native libxml2 tree. See also the `ElementTree
compatibility overview`_.

lxml also `extends this 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`_.

In addition to the ElementTree API, lxml also features an API for
`implementing namespaces`_ using tag specific element classes.  This is a
simple way to write arbitrary XML driven APIs on top of lxml.

lxml also offers a `SAX compliant API`_, that works with the SAX support
in the standard library.

.. _`ElementTree API`: http://effbot.org/zone/element-index.htm
.. _`ElementTree compatibility overview`: compatibility.html
.. _`extends this API`: api.html
.. _`extension functions`: extensions.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
.. _`implementing namespaces`: namespace_extensions.html
.. _`SAX compliant API`: sax.html

Mailing list
------------

Questions? Suggestions? Code to contribute? We have a `mailing list`_.

.. _`mailing list`: http://codespeak.net/mailman/listinfo/lxml-dev

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.
