main.txt 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. lxml
  2. ====
  3. .. meta::
  4. :description: lxml - the most feature-rich and easy-to-use library for processing XML and HTML in the Python language
  5. :keywords: Python XML, XML processing, HTML, lxml, simple XML, ElementTree, etree, lxml.etree, objectify, XML parsing, XML validation, XPath, XSLT
  6. .. class:: pagequote
  7. | `» lxml takes all the pain out of XML. « <https://mailman-mail5.webfaction.com/pipermail/lxml/20080131/019119.html>`_
  8. | Stephan Richter
  9. .. class:: eyecatcher
  10. lxml is the most feature-rich
  11. and easy-to-use library
  12. for processing XML and HTML
  13. in the Python language.
  14. ..
  15. 1 Introduction
  16. 2 Documentation
  17. 3 Download
  18. 4 Mailing list
  19. 5 Bug tracker
  20. 6 License
  21. 7 Old Versions
  22. Introduction
  23. ------------
  24. The lxml XML toolkit is a Pythonic binding for the C libraries
  25. libxml2_ and libxslt_. It is unique in that it combines the speed and
  26. XML feature completeness of these libraries with the simplicity of a
  27. native Python API, mostly compatible but superior to the well-known
  28. ElementTree_ API. The latest release works with all CPython versions
  29. from 2.7 to 3.9. See the introduction_ for more information about
  30. background and goals of the lxml project. Some common questions are
  31. answered in the FAQ_.
  32. .. _libxml2: http://xmlsoft.org/
  33. .. _libxslt: http://xmlsoft.org/XSLT/
  34. .. _introduction: intro.html
  35. .. _FAQ: FAQ.html
  36. Documentation
  37. -------------
  38. .. The complete lxml documentation is available for download as `PDF documentation`_.
  39. The HTML documentation from this web site is part of
  40. the normal `source download <#download>`_.
  41. * Tutorials:
  42. * the `lxml.etree tutorial for XML processing`_
  43. * John Shipman's tutorial on `Python XML processing with lxml`_
  44. * Fredrik Lundh's `tutorial for ElementTree`_
  45. * ElementTree:
  46. * `ElementTree API`_
  47. * compatibility_ and differences of lxml.etree
  48. * `ElementTree performance`_ characteristics and comparison
  49. * lxml.etree:
  50. * `lxml.etree specific API`_ documentation
  51. * the `generated API documentation`_ as a reference
  52. * parsing_ and validating_ XML
  53. * `XPath and XSLT`_ support
  54. * Python `XPath extension functions`_ for XPath and XSLT
  55. * `custom XML element classes`_ for custom XML APIs (see `EuroPython 2008 talk`_)
  56. * a `SAX compliant API`_ for interfacing with other XML tools
  57. * a `C-level API`_ for interfacing with external C/Cython modules
  58. * lxml.objectify:
  59. * `lxml.objectify`_ API documentation
  60. * a brief comparison of `objectify and etree`_
  61. lxml.etree follows the ElementTree_ API as much as possible, building
  62. it on top of the native libxml2 tree. If you are new to ElementTree,
  63. start with the `lxml.etree tutorial for XML processing`_. See also the
  64. ElementTree compatibility_ overview and the `ElementTree performance`_
  65. page comparing lxml to the original ElementTree_ and cElementTree_
  66. implementations.
  67. Right after the `lxml.etree tutorial for XML processing`_ and the
  68. ElementTree_ documentation, the next place to look is the `lxml.etree
  69. specific API`_ documentation. It describes how lxml extends the
  70. ElementTree API to expose libxml2 and libxslt specific XML
  71. functionality, such as XPath_, `Relax NG`_, `XML Schema`_, XSLT_, and
  72. `c14n`_ (including `c14n 2.0`_).
  73. Python code can be called from XPath expressions and XSLT
  74. stylesheets through the use of `XPath extension functions`_. lxml
  75. also offers a `SAX compliant API`_, that works with the SAX support in
  76. the standard library.
  77. There is a separate module `lxml.objectify`_ that implements a data-binding
  78. API on top of lxml.etree. See the `objectify and etree`_ FAQ entry for a
  79. comparison.
  80. In addition to the ElementTree API, lxml also features a sophisticated
  81. API for `custom XML element classes`_. This is a simple way to write
  82. arbitrary XML driven APIs on top of lxml. lxml.etree also has a
  83. `C-level API`_ that can be used to efficiently extend lxml.etree in
  84. external C modules, including fast custom element class support.
  85. .. _ElementTree: http://effbot.org/zone/element-index.htm
  86. .. _`ElementTree API`: http://effbot.org/zone/element-index.htm#documentation
  87. .. _cElementTree: http://effbot.org/zone/celementtree.htm
  88. .. _`tutorial for ElementTree`: http://effbot.org/zone/element.htm
  89. .. _`lxml.etree tutorial for XML processing`: tutorial.html
  90. .. _`Python XML processing with lxml`: http://www.nmt.edu/tcc/help/pubs/pylxml/
  91. .. _`generated API documentation`: api/index.html
  92. .. _`ElementTree performance`: performance.html
  93. .. _`compatibility`: compatibility.html
  94. .. _`lxml.etree specific API`: api.html
  95. .. _`parsing`: parsing.html
  96. .. _`validating`: validation.html
  97. .. _`XPath and XSLT`: xpathxslt.html
  98. .. _`XPath extension functions`: extensions.html
  99. .. _`custom XML element classes`: element_classes.html
  100. .. _`SAX compliant API`: sax.html
  101. .. _`C-level API`: capi.html
  102. .. _`lxml.objectify`: objectify.html
  103. .. _`objectify and etree`: FAQ.html#what-is-the-difference-between-lxml-etree-and-lxml-objectify
  104. .. _`EuroPython 2008 talk`: s5/lxml-ep2008.html
  105. .. _XPath: https://www.w3.org/TR/xpath/
  106. .. _`Relax NG`: https://relaxng.org/
  107. .. _`XML Schema`: https://www.w3.org/XML/Schema
  108. .. _`XSLT`: https://www.w3.org/TR/xslt
  109. .. _`c14n`: https://www.w3.org/TR/xml-c14n
  110. .. _`c14n 2.0`: https://www.w3.org/TR/xml-c14n2
  111. Download
  112. --------
  113. The best way to download lxml is to visit `lxml at the Python Package
  114. Index <http://pypi.python.org/pypi/lxml/>`_ (PyPI). It has the source
  115. that compiles on various platforms. The source distribution is signed
  116. with `this key <pubkey.asc>`_.
  117. The latest version is `lxml 4.9.1`_, released 2022-07-01
  118. (`changes for 4.9.1`_). `Older versions <#old-versions>`_
  119. are listed below.
  120. Please take a look at the
  121. `installation instructions <installation.html>`_ !
  122. This complete website (including the generated API documentation) is
  123. part of the source distribution, so if you want to download the
  124. documentation for offline use, take the source archive and copy the
  125. ``doc/html`` directory out of the source tree.
  126. .. , or use the `PDF documentation`_.
  127. The latest `installable developer sources <https://github.com/lxml/lxml/archive/master.zip>`_
  128. are available from Github. It's also possible to check out
  129. the latest development version of lxml from Github directly, using a command
  130. like this::
  131. git clone https://github.com/lxml/lxml.git lxml
  132. You can browse the `source repository`_ and its history through
  133. the web. Please read `how to build lxml from source <build.html>`_
  134. first. The `latest CHANGES`_ of the developer version are also
  135. accessible. You can check there if a bug you found has been fixed
  136. or a feature you want has been implemented in the latest trunk version.
  137. .. _`source repository`: https://github.com/lxml/lxml/
  138. .. _`latest CHANGES`: https://github.com/lxml/lxml/blob/master/CHANGES.txt
  139. Mailing list
  140. ------------
  141. Questions? Suggestions? Code to contribute? We have a `mailing list`_.
  142. You can also `search the archive`_ for past questions and discussions.
  143. .. _`search the archive`: https://mail.python.org/archives/list/lxml@python.org/
  144. .. _`mailing list`: https://lxml.de/mailinglist/
  145. Bug tracker
  146. -----------
  147. lxml uses the `launchpad bug tracker`_. If you are sure you found a
  148. bug in lxml, please file a bug report there. If you are not sure
  149. whether some unexpected behaviour of lxml is a bug or not, please
  150. check the documentation and ask on the `mailing list`_ first. Do not
  151. forget to `search the archive`_!
  152. .. _`launchpad bug tracker`: https://launchpad.net/lxml/
  153. License
  154. -------
  155. The lxml library is shipped under a `BSD license`_. libxml2 and libxslt2
  156. itself are shipped under the `MIT license`_. There should therefore be no
  157. obstacle to using lxml in your codebase.
  158. .. _`BSD license`: https://github.com/lxml/lxml/blob/master/doc/licenses/BSD.txt
  159. .. _`MIT license`: https://opensource.org/licenses/mit-license.html
  160. Old Versions
  161. ------------
  162. See the websites of lxml
  163. `4.8 <https://lxml.de/4.8/>`_,
  164. `4.7 <https://lxml.de/4.7/>`_,
  165. `4.6 <https://lxml.de/4.6/>`_,
  166. `4.5 <https://lxml.de/4.5/>`_,
  167. `4.4 <https://lxml.de/4.4/>`_,
  168. `4.3 <https://lxml.de/4.3/>`_,
  169. `4.2 <https://lxml.de/4.2/>`_,
  170. `4.1 <https://lxml.de/4.1/>`_,
  171. `4.0 <https://lxml.de/4.0/>`_,
  172. `3.8 <https://lxml.de/3.8/>`_,
  173. `3.7 <https://lxml.de/3.7/>`_,
  174. `3.6 <https://lxml.de/3.6/>`_,
  175. `3.5 <https://lxml.de/3.5/>`_,
  176. `3.4 <https://lxml.de/3.4/>`_,
  177. `3.3 <https://lxml.de/3.3/>`_,
  178. `3.2 <https://lxml.de/3.2/>`_,
  179. `3.1 <https://lxml.de/3.1/>`_,
  180. `3.0 <https://lxml.de/3.0/>`_,
  181. `2.3 <https://lxml.de/2.3/>`_,
  182. `2.2 <https://lxml.de/2.2/>`_,
  183. `2.1 <https://lxml.de/2.1/>`_,
  184. `2.0 <https://lxml.de/2.0/>`_,
  185. `1.3 <https://lxml.de/1.3/>`_
  186. ..
  187. and the `latest in-development version <https://lxml.de/dev/>`_.
  188. .. _`PDF documentation`: lxmldoc-4.9.1.pdf
  189. * `lxml 4.9.1`_, released 2022-07-01 (`changes for 4.9.1`_)
  190. * `lxml 4.9.0`_, released 2022-06-01 (`changes for 4.9.0`_)
  191. * `lxml 4.8.0`_, released 2022-02-17 (`changes for 4.8.0`_)
  192. * `lxml 4.7.1`_, released 2021-12-13 (`changes for 4.7.1`_)
  193. * `lxml 4.7.0`_, released 2021-12-13 (`changes for 4.7.0`_)
  194. * `lxml 4.6.5`_, released 2021-12-12 (`changes for 4.6.5`_)
  195. * `lxml 4.6.4`_, released 2021-11-01 (`changes for 4.6.4`_)
  196. * `lxml 4.6.3`_, released 2021-03-21 (`changes for 4.6.3`_)
  197. * `lxml 4.6.2`_, released 2020-11-26 (`changes for 4.6.2`_)
  198. * `lxml 4.6.1`_, released 2020-10-18 (`changes for 4.6.1`_)
  199. * `lxml 4.6.0`_, released 2020-10-17 (`changes for 4.6.0`_)
  200. * `older releases <https://lxml.de/4.6/#old-versions>`_
  201. .. _`lxml 4.9.1`: /files/lxml-4.9.1.tgz
  202. .. _`lxml 4.9.0`: /files/lxml-4.9.0.tgz
  203. .. _`lxml 4.8.0`: /files/lxml-4.8.0.tgz
  204. .. _`lxml 4.7.1`: /files/lxml-4.7.1.tgz
  205. .. _`lxml 4.7.0`: /files/lxml-4.7.0.tgz
  206. .. _`lxml 4.6.5`: /files/lxml-4.6.5.tgz
  207. .. _`lxml 4.6.4`: /files/lxml-4.6.4.tgz
  208. .. _`lxml 4.6.3`: /files/lxml-4.6.3.tgz
  209. .. _`lxml 4.6.2`: /files/lxml-4.6.2.tgz
  210. .. _`lxml 4.6.1`: /files/lxml-4.6.1.tgz
  211. .. _`lxml 4.6.0`: /files/lxml-4.6.0.tgz
  212. .. _`changes for 4.9.1`: /changes-4.9.1.html
  213. .. _`changes for 4.9.0`: /changes-4.9.0.html
  214. .. _`changes for 4.8.0`: /changes-4.8.0.html
  215. .. _`changes for 4.7.1`: /changes-4.7.1.html
  216. .. _`changes for 4.7.0`: /changes-4.7.0.html
  217. .. _`changes for 4.6.5`: /changes-4.6.5.html
  218. .. _`changes for 4.6.4`: /changes-4.6.4.html
  219. .. _`changes for 4.6.3`: /changes-4.6.3.html
  220. .. _`changes for 4.6.2`: /changes-4.6.2.html
  221. .. _`changes for 4.6.1`: /changes-4.6.1.html
  222. .. _`changes for 4.6.0`: /changes-4.6.0.html