blob: 5f799aba994d709fa4fd1e6ca68b95cebec3309d [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001:mod:`xml.etree.ElementTree` --- The ElementTree XML API
2========================================================
3
4.. module:: xml.etree.ElementTree
5 :synopsis: Implementation of the ElementTree API.
Terry Jan Reedyfa089b92016-06-11 15:02:54 -04006
Georg Brandl116aa622007-08-15 14:28:22 +00007.. moduleauthor:: Fredrik Lundh <fredrik@pythonware.com>
8
Terry Jan Reedyfa089b92016-06-11 15:02:54 -04009**Source code:** :source:`Lib/xml/etree/ElementTree.py`
10
11--------------
12
Eli Benderskyc1d98692012-03-30 11:44:15 +030013The :mod:`xml.etree.ElementTree` module implements a simple and efficient API
14for parsing and creating XML data.
Florent Xiclunaf15351d2010-03-13 23:24:31 +000015
Florent Xiclunaa72a98f2012-02-13 11:03:30 +010016.. versionchanged:: 3.3
17 This module will use a fast implementation whenever available.
18 The :mod:`xml.etree.cElementTree` module is deprecated.
19
Christian Heimes7380a672013-03-26 17:35:55 +010020
21.. warning::
22
23 The :mod:`xml.etree.ElementTree` module is not secure against
24 maliciously constructed data. If you need to parse untrusted or
25 unauthenticated data see :ref:`xml-vulnerabilities`.
26
Eli Benderskyc1d98692012-03-30 11:44:15 +030027Tutorial
28--------
Georg Brandl116aa622007-08-15 14:28:22 +000029
Eli Benderskyc1d98692012-03-30 11:44:15 +030030This is a short tutorial for using :mod:`xml.etree.ElementTree` (``ET`` in
31short). The goal is to demonstrate some of the building blocks and basic
32concepts of the module.
Eli Bendersky3a4875e2012-03-26 20:43:32 +020033
Eli Benderskyc1d98692012-03-30 11:44:15 +030034XML tree and elements
35^^^^^^^^^^^^^^^^^^^^^
Eli Bendersky3a4875e2012-03-26 20:43:32 +020036
Eli Benderskyc1d98692012-03-30 11:44:15 +030037XML is an inherently hierarchical data format, and the most natural way to
38represent it is with a tree. ``ET`` has two classes for this purpose -
39:class:`ElementTree` represents the whole XML document as a tree, and
40:class:`Element` represents a single node in this tree. Interactions with
41the whole document (reading and writing to/from files) are usually done
42on the :class:`ElementTree` level. Interactions with a single XML element
43and its sub-elements are done on the :class:`Element` level.
Eli Bendersky3a4875e2012-03-26 20:43:32 +020044
Eli Benderskyc1d98692012-03-30 11:44:15 +030045.. _elementtree-parsing-xml:
Eli Bendersky3a4875e2012-03-26 20:43:32 +020046
Eli Benderskyc1d98692012-03-30 11:44:15 +030047Parsing XML
48^^^^^^^^^^^
Eli Bendersky3a4875e2012-03-26 20:43:32 +020049
Eli Bendersky0f4e9342012-08-14 07:19:33 +030050We'll be using the following XML document as the sample data for this section:
Eli Bendersky3a4875e2012-03-26 20:43:32 +020051
Eli Bendersky0f4e9342012-08-14 07:19:33 +030052.. code-block:: xml
53
54 <?xml version="1.0"?>
Eli Bendersky3a4875e2012-03-26 20:43:32 +020055 <data>
Eli Bendersky3115f0d2012-08-15 14:26:30 +030056 <country name="Liechtenstein">
Eli Bendersky3a4875e2012-03-26 20:43:32 +020057 <rank>1</rank>
58 <year>2008</year>
59 <gdppc>141100</gdppc>
60 <neighbor name="Austria" direction="E"/>
61 <neighbor name="Switzerland" direction="W"/>
62 </country>
63 <country name="Singapore">
64 <rank>4</rank>
65 <year>2011</year>
66 <gdppc>59900</gdppc>
67 <neighbor name="Malaysia" direction="N"/>
68 </country>
69 <country name="Panama">
70 <rank>68</rank>
71 <year>2011</year>
72 <gdppc>13600</gdppc>
73 <neighbor name="Costa Rica" direction="W"/>
74 <neighbor name="Colombia" direction="E"/>
75 </country>
76 </data>
Eli Bendersky3a4875e2012-03-26 20:43:32 +020077
Eli Bendersky0f4e9342012-08-14 07:19:33 +030078We can import this data by reading from a file::
Eli Benderskyc1d98692012-03-30 11:44:15 +030079
80 import xml.etree.ElementTree as ET
Eli Bendersky0f4e9342012-08-14 07:19:33 +030081 tree = ET.parse('country_data.xml')
82 root = tree.getroot()
Eli Benderskyc1d98692012-03-30 11:44:15 +030083
Eli Bendersky0f4e9342012-08-14 07:19:33 +030084Or directly from a string::
85
86 root = ET.fromstring(country_data_as_string)
Eli Benderskyc1d98692012-03-30 11:44:15 +030087
88:func:`fromstring` parses XML from a string directly into an :class:`Element`,
89which is the root element of the parsed tree. Other parsing functions may
Eli Bendersky0f4e9342012-08-14 07:19:33 +030090create an :class:`ElementTree`. Check the documentation to be sure.
Eli Benderskyc1d98692012-03-30 11:44:15 +030091
92As an :class:`Element`, ``root`` has a tag and a dictionary of attributes::
93
94 >>> root.tag
95 'data'
96 >>> root.attrib
97 {}
98
99It also has children nodes over which we can iterate::
100
101 >>> for child in root:
Serhiy Storchakadba90392016-05-10 12:01:23 +0300102 ... print(child.tag, child.attrib)
Eli Benderskyc1d98692012-03-30 11:44:15 +0300103 ...
Eli Bendersky3115f0d2012-08-15 14:26:30 +0300104 country {'name': 'Liechtenstein'}
Eli Benderskyc1d98692012-03-30 11:44:15 +0300105 country {'name': 'Singapore'}
106 country {'name': 'Panama'}
107
108Children are nested, and we can access specific child nodes by index::
109
110 >>> root[0][1].text
111 '2008'
112
R David Murray410d3202014-01-04 23:52:50 -0500113
Eli Bendersky0bd22d42014-04-03 06:14:38 -0700114.. note::
115
116 Not all elements of the XML input will end up as elements of the
117 parsed tree. Currently, this module skips over any XML comments,
118 processing instructions, and document type declarations in the
119 input. Nevertheless, trees built using this module's API rather
120 than parsing from XML text can have comments and processing
121 instructions in them; they will be included when generating XML
122 output. A document type declaration may be accessed by passing a
123 custom :class:`TreeBuilder` instance to the :class:`XMLParser`
124 constructor.
125
126
R David Murray410d3202014-01-04 23:52:50 -0500127.. _elementtree-pull-parsing:
128
Eli Bendersky2c68e302013-08-31 07:37:23 -0700129Pull API for non-blocking parsing
Eli Benderskyb5869342013-08-30 05:51:20 -0700130^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Eli Bendersky3bdead12013-04-20 09:06:27 -0700131
R David Murray410d3202014-01-04 23:52:50 -0500132Most parsing functions provided by this module require the whole document
133to be read at once before returning any result. It is possible to use an
134:class:`XMLParser` and feed data into it incrementally, but it is a push API that
Eli Benderskyb5869342013-08-30 05:51:20 -0700135calls methods on a callback target, which is too low-level and inconvenient for
136most needs. Sometimes what the user really wants is to be able to parse XML
137incrementally, without blocking operations, while enjoying the convenience of
138fully constructed :class:`Element` objects.
Eli Bendersky3bdead12013-04-20 09:06:27 -0700139
Eli Benderskyb5869342013-08-30 05:51:20 -0700140The most powerful tool for doing this is :class:`XMLPullParser`. It does not
141require a blocking read to obtain the XML data, and is instead fed with data
142incrementally with :meth:`XMLPullParser.feed` calls. To get the parsed XML
R David Murray410d3202014-01-04 23:52:50 -0500143elements, call :meth:`XMLPullParser.read_events`. Here is an example::
Eli Benderskyb5869342013-08-30 05:51:20 -0700144
Eli Bendersky2c68e302013-08-31 07:37:23 -0700145 >>> parser = ET.XMLPullParser(['start', 'end'])
146 >>> parser.feed('<mytag>sometext')
147 >>> list(parser.read_events())
Eli Benderskyb5869342013-08-30 05:51:20 -0700148 [('start', <Element 'mytag' at 0x7fa66db2be58>)]
Eli Bendersky2c68e302013-08-31 07:37:23 -0700149 >>> parser.feed(' more text</mytag>')
150 >>> for event, elem in parser.read_events():
Serhiy Storchakadba90392016-05-10 12:01:23 +0300151 ... print(event)
152 ... print(elem.tag, 'text=', elem.text)
Eli Benderskyb5869342013-08-30 05:51:20 -0700153 ...
154 end
Eli Bendersky3bdead12013-04-20 09:06:27 -0700155
Eli Bendersky2c68e302013-08-31 07:37:23 -0700156The obvious use case is applications that operate in a non-blocking fashion
Eli Bendersky3bdead12013-04-20 09:06:27 -0700157where the XML data is being received from a socket or read incrementally from
158some storage device. In such cases, blocking reads are unacceptable.
159
Eli Benderskyb5869342013-08-30 05:51:20 -0700160Because it's so flexible, :class:`XMLPullParser` can be inconvenient to use for
161simpler use-cases. If you don't mind your application blocking on reading XML
162data but would still like to have incremental parsing capabilities, take a look
163at :func:`iterparse`. It can be useful when you're reading a large XML document
164and don't want to hold it wholly in memory.
Eli Bendersky3bdead12013-04-20 09:06:27 -0700165
Eli Benderskyc1d98692012-03-30 11:44:15 +0300166Finding interesting elements
167^^^^^^^^^^^^^^^^^^^^^^^^^^^^
168
169:class:`Element` has some useful methods that help iterate recursively over all
170the sub-tree below it (its children, their children, and so on). For example,
171:meth:`Element.iter`::
172
173 >>> for neighbor in root.iter('neighbor'):
Serhiy Storchakadba90392016-05-10 12:01:23 +0300174 ... print(neighbor.attrib)
Eli Benderskyc1d98692012-03-30 11:44:15 +0300175 ...
176 {'name': 'Austria', 'direction': 'E'}
177 {'name': 'Switzerland', 'direction': 'W'}
178 {'name': 'Malaysia', 'direction': 'N'}
179 {'name': 'Costa Rica', 'direction': 'W'}
180 {'name': 'Colombia', 'direction': 'E'}
181
Eli Bendersky0f4e9342012-08-14 07:19:33 +0300182:meth:`Element.findall` finds only elements with a tag which are direct
183children of the current element. :meth:`Element.find` finds the *first* child
Georg Brandlbdaee3a2013-10-06 09:23:03 +0200184with a particular tag, and :attr:`Element.text` accesses the element's text
Eli Bendersky0f4e9342012-08-14 07:19:33 +0300185content. :meth:`Element.get` accesses the element's attributes::
186
187 >>> for country in root.findall('country'):
Serhiy Storchakadba90392016-05-10 12:01:23 +0300188 ... rank = country.find('rank').text
189 ... name = country.get('name')
190 ... print(name, rank)
Eli Bendersky0f4e9342012-08-14 07:19:33 +0300191 ...
Eli Bendersky3115f0d2012-08-15 14:26:30 +0300192 Liechtenstein 1
Eli Bendersky0f4e9342012-08-14 07:19:33 +0300193 Singapore 4
194 Panama 68
195
Eli Benderskyc1d98692012-03-30 11:44:15 +0300196More sophisticated specification of which elements to look for is possible by
197using :ref:`XPath <elementtree-xpath>`.
198
Eli Bendersky0f4e9342012-08-14 07:19:33 +0300199Modifying an XML File
200^^^^^^^^^^^^^^^^^^^^^
Eli Benderskyc1d98692012-03-30 11:44:15 +0300201
Eli Bendersky0f4e9342012-08-14 07:19:33 +0300202:class:`ElementTree` provides a simple way to build XML documents and write them to files.
Eli Benderskyc1d98692012-03-30 11:44:15 +0300203The :meth:`ElementTree.write` method serves this purpose.
204
205Once created, an :class:`Element` object may be manipulated by directly changing
206its fields (such as :attr:`Element.text`), adding and modifying attributes
207(:meth:`Element.set` method), as well as adding new children (for example
208with :meth:`Element.append`).
209
Eli Bendersky0f4e9342012-08-14 07:19:33 +0300210Let's say we want to add one to each country's rank, and add an ``updated``
211attribute to the rank element::
212
213 >>> for rank in root.iter('rank'):
Serhiy Storchakadba90392016-05-10 12:01:23 +0300214 ... new_rank = int(rank.text) + 1
215 ... rank.text = str(new_rank)
216 ... rank.set('updated', 'yes')
Eli Bendersky0f4e9342012-08-14 07:19:33 +0300217 ...
Eli Benderskya1b0f6d2012-08-18 05:42:22 +0300218 >>> tree.write('output.xml')
Eli Bendersky0f4e9342012-08-14 07:19:33 +0300219
220Our XML now looks like this:
221
222.. code-block:: xml
223
224 <?xml version="1.0"?>
225 <data>
Eli Bendersky3115f0d2012-08-15 14:26:30 +0300226 <country name="Liechtenstein">
Eli Bendersky0f4e9342012-08-14 07:19:33 +0300227 <rank updated="yes">2</rank>
228 <year>2008</year>
229 <gdppc>141100</gdppc>
230 <neighbor name="Austria" direction="E"/>
231 <neighbor name="Switzerland" direction="W"/>
232 </country>
233 <country name="Singapore">
234 <rank updated="yes">5</rank>
235 <year>2011</year>
236 <gdppc>59900</gdppc>
237 <neighbor name="Malaysia" direction="N"/>
238 </country>
239 <country name="Panama">
240 <rank updated="yes">69</rank>
241 <year>2011</year>
242 <gdppc>13600</gdppc>
243 <neighbor name="Costa Rica" direction="W"/>
244 <neighbor name="Colombia" direction="E"/>
245 </country>
246 </data>
247
248We can remove elements using :meth:`Element.remove`. Let's say we want to
249remove all countries with a rank higher than 50::
250
251 >>> for country in root.findall('country'):
Serhiy Storchakadba90392016-05-10 12:01:23 +0300252 ... rank = int(country.find('rank').text)
253 ... if rank > 50:
254 ... root.remove(country)
Eli Bendersky0f4e9342012-08-14 07:19:33 +0300255 ...
Eli Benderskya1b0f6d2012-08-18 05:42:22 +0300256 >>> tree.write('output.xml')
Eli Bendersky0f4e9342012-08-14 07:19:33 +0300257
258Our XML now looks like this:
259
260.. code-block:: xml
261
262 <?xml version="1.0"?>
263 <data>
Eli Bendersky3115f0d2012-08-15 14:26:30 +0300264 <country name="Liechtenstein">
Eli Bendersky0f4e9342012-08-14 07:19:33 +0300265 <rank updated="yes">2</rank>
266 <year>2008</year>
267 <gdppc>141100</gdppc>
268 <neighbor name="Austria" direction="E"/>
269 <neighbor name="Switzerland" direction="W"/>
270 </country>
271 <country name="Singapore">
272 <rank updated="yes">5</rank>
273 <year>2011</year>
274 <gdppc>59900</gdppc>
275 <neighbor name="Malaysia" direction="N"/>
276 </country>
277 </data>
278
279Building XML documents
280^^^^^^^^^^^^^^^^^^^^^^
281
Eli Benderskyc1d98692012-03-30 11:44:15 +0300282The :func:`SubElement` function also provides a convenient way to create new
283sub-elements for a given element::
284
285 >>> a = ET.Element('a')
286 >>> b = ET.SubElement(a, 'b')
287 >>> c = ET.SubElement(a, 'c')
288 >>> d = ET.SubElement(c, 'd')
289 >>> ET.dump(a)
290 <a><b /><c><d /></c></a>
291
Raymond Hettingerf6e31b72015-03-22 15:29:09 -0700292Parsing XML with Namespaces
293^^^^^^^^^^^^^^^^^^^^^^^^^^^
294
295If the XML input has `namespaces
296<https://en.wikipedia.org/wiki/XML_namespace>`__, tags and attributes
297with prefixes in the form ``prefix:sometag`` get expanded to
Raymond Hettingerc43a6662015-03-30 20:29:28 -0700298``{uri}sometag`` where the *prefix* is replaced by the full *URI*.
299Also, if there is a `default namespace
Miss Islington (bot)e6033202018-02-10 15:08:34 -0800300<https://www.w3.org/TR/xml-names/#defaulting>`__,
Raymond Hettingerf6e31b72015-03-22 15:29:09 -0700301that full URI gets prepended to all of the non-prefixed tags.
302
303Here is an XML example that incorporates two namespaces, one with the
304prefix "fictional" and the other serving as the default namespace:
305
306.. code-block:: xml
307
308 <?xml version="1.0"?>
309 <actors xmlns:fictional="http://characters.example.com"
310 xmlns="http://people.example.com">
311 <actor>
312 <name>John Cleese</name>
313 <fictional:character>Lancelot</fictional:character>
314 <fictional:character>Archie Leach</fictional:character>
315 </actor>
316 <actor>
317 <name>Eric Idle</name>
318 <fictional:character>Sir Robin</fictional:character>
319 <fictional:character>Gunther</fictional:character>
320 <fictional:character>Commander Clement</fictional:character>
321 </actor>
322 </actors>
323
324One way to search and explore this XML example is to manually add the
Raymond Hettingerc43a6662015-03-30 20:29:28 -0700325URI to every tag or attribute in the xpath of a
326:meth:`~Element.find` or :meth:`~Element.findall`::
Raymond Hettingerf6e31b72015-03-22 15:29:09 -0700327
Raymond Hettingerc43a6662015-03-30 20:29:28 -0700328 root = fromstring(xml_text)
Raymond Hettingerf6e31b72015-03-22 15:29:09 -0700329 for actor in root.findall('{http://people.example.com}actor'):
330 name = actor.find('{http://people.example.com}name')
331 print(name.text)
332 for char in actor.findall('{http://characters.example.com}character'):
333 print(' |-->', char.text)
334
Raymond Hettingerc43a6662015-03-30 20:29:28 -0700335A better way to search the namespaced XML example is to create a
336dictionary with your own prefixes and use those in the search functions::
Raymond Hettingerf6e31b72015-03-22 15:29:09 -0700337
338 ns = {'real_person': 'http://people.example.com',
339 'role': 'http://characters.example.com'}
340
341 for actor in root.findall('real_person:actor', ns):
342 name = actor.find('real_person:name', ns)
343 print(name.text)
344 for char in actor.findall('role:character', ns):
345 print(' |-->', char.text)
346
347These two approaches both output::
348
349 John Cleese
350 |--> Lancelot
351 |--> Archie Leach
352 Eric Idle
353 |--> Sir Robin
354 |--> Gunther
355 |--> Commander Clement
356
357
Eli Benderskyc1d98692012-03-30 11:44:15 +0300358Additional resources
359^^^^^^^^^^^^^^^^^^^^
360
361See http://effbot.org/zone/element-index.htm for tutorials and links to other
362docs.
363
364
365.. _elementtree-xpath:
366
367XPath support
368-------------
369
370This module provides limited support for
Serhiy Storchaka6dff0202016-05-07 10:49:07 +0300371`XPath expressions <https://www.w3.org/TR/xpath>`_ for locating elements in a
Eli Benderskyc1d98692012-03-30 11:44:15 +0300372tree. The goal is to support a small subset of the abbreviated syntax; a full
373XPath engine is outside the scope of the module.
374
375Example
376^^^^^^^
377
378Here's an example that demonstrates some of the XPath capabilities of the
379module. We'll be using the ``countrydata`` XML document from the
380:ref:`Parsing XML <elementtree-parsing-xml>` section::
381
382 import xml.etree.ElementTree as ET
383
384 root = ET.fromstring(countrydata)
Eli Bendersky3a4875e2012-03-26 20:43:32 +0200385
386 # Top-level elements
Eli Benderskyc1d98692012-03-30 11:44:15 +0300387 root.findall(".")
Eli Bendersky3a4875e2012-03-26 20:43:32 +0200388
389 # All 'neighbor' grand-children of 'country' children of the top-level
390 # elements
Eli Benderskyc1d98692012-03-30 11:44:15 +0300391 root.findall("./country/neighbor")
Eli Bendersky3a4875e2012-03-26 20:43:32 +0200392
393 # Nodes with name='Singapore' that have a 'year' child
Eli Benderskyc1d98692012-03-30 11:44:15 +0300394 root.findall(".//year/..[@name='Singapore']")
Eli Bendersky3a4875e2012-03-26 20:43:32 +0200395
396 # 'year' nodes that are children of nodes with name='Singapore'
Eli Benderskyc1d98692012-03-30 11:44:15 +0300397 root.findall(".//*[@name='Singapore']/year")
Eli Bendersky3a4875e2012-03-26 20:43:32 +0200398
399 # All 'neighbor' nodes that are the second child of their parent
Eli Benderskyc1d98692012-03-30 11:44:15 +0300400 root.findall(".//neighbor[2]")
Eli Bendersky3a4875e2012-03-26 20:43:32 +0200401
402Supported XPath syntax
403^^^^^^^^^^^^^^^^^^^^^^
404
Georg Brandl44ea77b2013-03-28 13:28:44 +0100405.. tabularcolumns:: |l|L|
406
Eli Bendersky3a4875e2012-03-26 20:43:32 +0200407+-----------------------+------------------------------------------------------+
408| Syntax | Meaning |
409+=======================+======================================================+
410| ``tag`` | Selects all child elements with the given tag. |
411| | For example, ``spam`` selects all child elements |
Raymond Hettinger1e1e6012014-03-29 11:50:08 -0700412| | named ``spam``, and ``spam/egg`` selects all |
Eli Bendersky3a4875e2012-03-26 20:43:32 +0200413| | grandchildren named ``egg`` in all children named |
414| | ``spam``. |
415+-----------------------+------------------------------------------------------+
416| ``*`` | Selects all child elements. For example, ``*/egg`` |
417| | selects all grandchildren named ``egg``. |
418+-----------------------+------------------------------------------------------+
419| ``.`` | Selects the current node. This is mostly useful |
420| | at the beginning of the path, to indicate that it's |
421| | a relative path. |
422+-----------------------+------------------------------------------------------+
423| ``//`` | Selects all subelements, on all levels beneath the |
Eli Benderskyede001a2012-03-27 04:57:23 +0200424| | current element. For example, ``.//egg`` selects |
Eli Bendersky3a4875e2012-03-26 20:43:32 +0200425| | all ``egg`` elements in the entire tree. |
426+-----------------------+------------------------------------------------------+
Eli Bendersky323a43a2012-10-09 06:46:33 -0700427| ``..`` | Selects the parent element. Returns ``None`` if the |
428| | path attempts to reach the ancestors of the start |
429| | element (the element ``find`` was called on). |
Eli Bendersky3a4875e2012-03-26 20:43:32 +0200430+-----------------------+------------------------------------------------------+
431| ``[@attrib]`` | Selects all elements that have the given attribute. |
432+-----------------------+------------------------------------------------------+
433| ``[@attrib='value']`` | Selects all elements for which the given attribute |
434| | has the given value. The value cannot contain |
435| | quotes. |
436+-----------------------+------------------------------------------------------+
437| ``[tag]`` | Selects all elements that have a child named |
438| | ``tag``. Only immediate children are supported. |
439+-----------------------+------------------------------------------------------+
scoder101a5e82017-09-30 15:35:21 +0200440| ``[.='text']`` | Selects all elements whose complete text content, |
441| | including descendants, equals the given ``text``. |
442| | |
443| | .. versionadded:: 3.7 |
444+-----------------------+------------------------------------------------------+
Raymond Hettingerc43a6662015-03-30 20:29:28 -0700445| ``[tag='text']`` | Selects all elements that have a child named |
446| | ``tag`` whose complete text content, including |
447| | descendants, equals the given ``text``. |
Raymond Hettingerf6e31b72015-03-22 15:29:09 -0700448+-----------------------+------------------------------------------------------+
Eli Bendersky3a4875e2012-03-26 20:43:32 +0200449| ``[position]`` | Selects all elements that are located at the given |
450| | position. The position can be either an integer |
451| | (1 is the first position), the expression ``last()`` |
452| | (for the last position), or a position relative to |
453| | the last position (e.g. ``last()-1``). |
454+-----------------------+------------------------------------------------------+
455
456Predicates (expressions within square brackets) must be preceded by a tag
457name, an asterisk, or another predicate. ``position`` predicates must be
458preceded by a tag name.
459
460Reference
461---------
462
Georg Brandl116aa622007-08-15 14:28:22 +0000463.. _elementtree-functions:
464
465Functions
Eli Bendersky3a4875e2012-03-26 20:43:32 +0200466^^^^^^^^^
Georg Brandl116aa622007-08-15 14:28:22 +0000467
468
Georg Brandl7f01a132009-09-16 15:58:14 +0000469.. function:: Comment(text=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000470
Georg Brandlf6945182008-02-01 11:56:49 +0000471 Comment element factory. This factory function creates a special element
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000472 that will be serialized as an XML comment by the standard serializer. The
473 comment string can be either a bytestring or a Unicode string. *text* is a
474 string containing the comment string. Returns an element instance
Georg Brandlf6945182008-02-01 11:56:49 +0000475 representing a comment.
Georg Brandl116aa622007-08-15 14:28:22 +0000476
Eli Bendersky0bd22d42014-04-03 06:14:38 -0700477 Note that :class:`XMLParser` skips over comments in the input
478 instead of creating comment objects for them. An :class:`ElementTree` will
479 only contain comment nodes if they have been inserted into to
480 the tree using one of the :class:`Element` methods.
Georg Brandl116aa622007-08-15 14:28:22 +0000481
482.. function:: dump(elem)
483
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000484 Writes an element tree or element structure to sys.stdout. This function
485 should be used for debugging only.
Georg Brandl116aa622007-08-15 14:28:22 +0000486
487 The exact output format is implementation dependent. In this version, it's
488 written as an ordinary XML file.
489
490 *elem* is an element tree or an individual element.
491
492
Miss Islington (bot)b046f1b2019-02-21 16:45:31 -0800493.. function:: fromstring(text, parser=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000494
Florent Xiclunadddd5e92010-03-14 01:28:07 +0000495 Parses an XML section from a string constant. Same as :func:`XML`. *text*
Miss Islington (bot)b046f1b2019-02-21 16:45:31 -0800496 is a string containing XML data. *parser* is an optional parser instance.
497 If not given, the standard :class:`XMLParser` parser is used.
498 Returns an :class:`Element` instance.
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000499
500
501.. function:: fromstringlist(sequence, parser=None)
502
503 Parses an XML document from a sequence of string fragments. *sequence* is a
504 list or other sequence containing XML data fragments. *parser* is an
505 optional parser instance. If not given, the standard :class:`XMLParser`
506 parser is used. Returns an :class:`Element` instance.
507
Ezio Melottif8754a62010-03-21 07:16:43 +0000508 .. versionadded:: 3.2
Georg Brandl116aa622007-08-15 14:28:22 +0000509
510
511.. function:: iselement(element)
512
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000513 Checks if an object appears to be a valid element object. *element* is an
514 element instance. Returns a true value if this is an element object.
Georg Brandl116aa622007-08-15 14:28:22 +0000515
516
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000517.. function:: iterparse(source, events=None, parser=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000518
519 Parses an XML section into an element tree incrementally, and reports what's
Eli Bendersky604c4ff2012-03-16 08:41:30 +0200520 going on to the user. *source* is a filename or :term:`file object`
Eli Benderskyfb625442013-05-19 09:09:24 -0700521 containing XML data. *events* is a sequence of events to report back. The
Eli Benderskyb5869342013-08-30 05:51:20 -0700522 supported events are the strings ``"start"``, ``"end"``, ``"start-ns"`` and
523 ``"end-ns"`` (the "ns" events are used to get detailed namespace
Eli Bendersky604c4ff2012-03-16 08:41:30 +0200524 information). If *events* is omitted, only ``"end"`` events are reported.
525 *parser* is an optional parser instance. If not given, the standard
Eli Benderskyb5869342013-08-30 05:51:20 -0700526 :class:`XMLParser` parser is used. *parser* must be a subclass of
527 :class:`XMLParser` and can only use the default :class:`TreeBuilder` as a
528 target. Returns an :term:`iterator` providing ``(event, elem)`` pairs.
Georg Brandl116aa622007-08-15 14:28:22 +0000529
Eli Benderskyab2a76c2013-04-20 05:53:50 -0700530 Note that while :func:`iterparse` builds the tree incrementally, it issues
531 blocking reads on *source* (or the file it names). As such, it's unsuitable
Eli Bendersky2c68e302013-08-31 07:37:23 -0700532 for applications where blocking reads can't be made. For fully non-blocking
533 parsing, see :class:`XMLPullParser`.
Eli Benderskyab2a76c2013-04-20 05:53:50 -0700534
Benjamin Peterson75edad02009-01-01 15:05:06 +0000535 .. note::
536
Eli Benderskyb5869342013-08-30 05:51:20 -0700537 :func:`iterparse` only guarantees that it has seen the ">" character of a
538 starting tag when it emits a "start" event, so the attributes are defined,
539 but the contents of the text and tail attributes are undefined at that
540 point. The same applies to the element children; they may or may not be
541 present.
Benjamin Peterson75edad02009-01-01 15:05:06 +0000542
543 If you need a fully populated element, look for "end" events instead.
544
Eli Benderskyb5869342013-08-30 05:51:20 -0700545 .. deprecated:: 3.4
546 The *parser* argument.
547
Georg Brandl7f01a132009-09-16 15:58:14 +0000548.. function:: parse(source, parser=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000549
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000550 Parses an XML section into an element tree. *source* is a filename or file
551 object containing XML data. *parser* is an optional parser instance. If
552 not given, the standard :class:`XMLParser` parser is used. Returns an
553 :class:`ElementTree` instance.
Georg Brandl116aa622007-08-15 14:28:22 +0000554
555
Georg Brandl7f01a132009-09-16 15:58:14 +0000556.. function:: ProcessingInstruction(target, text=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000557
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000558 PI element factory. This factory function creates a special element that
559 will be serialized as an XML processing instruction. *target* is a string
560 containing the PI target. *text* is a string containing the PI contents, if
561 given. Returns an element instance, representing a processing instruction.
562
Eli Bendersky0bd22d42014-04-03 06:14:38 -0700563 Note that :class:`XMLParser` skips over processing instructions
564 in the input instead of creating comment objects for them. An
565 :class:`ElementTree` will only contain processing instruction nodes if
566 they have been inserted into to the tree using one of the
567 :class:`Element` methods.
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000568
569.. function:: register_namespace(prefix, uri)
570
571 Registers a namespace prefix. The registry is global, and any existing
572 mapping for either the given prefix or the namespace URI will be removed.
573 *prefix* is a namespace prefix. *uri* is a namespace uri. Tags and
574 attributes in this namespace will be serialized with the given prefix, if at
575 all possible.
576
Ezio Melottif8754a62010-03-21 07:16:43 +0000577 .. versionadded:: 3.2
Georg Brandl116aa622007-08-15 14:28:22 +0000578
579
Georg Brandl7f01a132009-09-16 15:58:14 +0000580.. function:: SubElement(parent, tag, attrib={}, **extra)
Georg Brandl116aa622007-08-15 14:28:22 +0000581
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000582 Subelement factory. This function creates an element instance, and appends
583 it to an existing element.
Georg Brandl116aa622007-08-15 14:28:22 +0000584
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000585 The element name, attribute names, and attribute values can be either
586 bytestrings or Unicode strings. *parent* is the parent element. *tag* is
587 the subelement name. *attrib* is an optional dictionary, containing element
588 attributes. *extra* contains additional attributes, given as keyword
589 arguments. Returns an element instance.
Georg Brandl116aa622007-08-15 14:28:22 +0000590
591
Serhiy Storchaka9e189f02013-01-13 22:24:27 +0200592.. function:: tostring(element, encoding="us-ascii", method="xml", *, \
Eli Benderskya9a2ef52013-01-13 06:04:43 -0800593 short_empty_elements=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000594
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000595 Generates a string representation of an XML element, including all
Florent Xiclunadddd5e92010-03-14 01:28:07 +0000596 subelements. *element* is an :class:`Element` instance. *encoding* [1]_ is
Florent Xiclunac17f1722010-08-08 19:48:29 +0000597 the output encoding (default is US-ASCII). Use ``encoding="unicode"`` to
Eli Bendersky831893a2012-10-09 07:18:16 -0700598 generate a Unicode string (otherwise, a bytestring is generated). *method*
599 is either ``"xml"``, ``"html"`` or ``"text"`` (default is ``"xml"``).
Eli Benderskya9a2ef52013-01-13 06:04:43 -0800600 *short_empty_elements* has the same meaning as in :meth:`ElementTree.write`.
Eli Bendersky831893a2012-10-09 07:18:16 -0700601 Returns an (optionally) encoded string containing the XML data.
Georg Brandl116aa622007-08-15 14:28:22 +0000602
Eli Benderskya9a2ef52013-01-13 06:04:43 -0800603 .. versionadded:: 3.4
604 The *short_empty_elements* parameter.
Georg Brandl116aa622007-08-15 14:28:22 +0000605
Eli Benderskya9a2ef52013-01-13 06:04:43 -0800606
Serhiy Storchaka9e189f02013-01-13 22:24:27 +0200607.. function:: tostringlist(element, encoding="us-ascii", method="xml", *, \
Eli Benderskya9a2ef52013-01-13 06:04:43 -0800608 short_empty_elements=True)
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000609
610 Generates a string representation of an XML element, including all
Florent Xiclunadddd5e92010-03-14 01:28:07 +0000611 subelements. *element* is an :class:`Element` instance. *encoding* [1]_ is
Florent Xiclunac17f1722010-08-08 19:48:29 +0000612 the output encoding (default is US-ASCII). Use ``encoding="unicode"`` to
Eli Bendersky831893a2012-10-09 07:18:16 -0700613 generate a Unicode string (otherwise, a bytestring is generated). *method*
614 is either ``"xml"``, ``"html"`` or ``"text"`` (default is ``"xml"``).
Eli Benderskya9a2ef52013-01-13 06:04:43 -0800615 *short_empty_elements* has the same meaning as in :meth:`ElementTree.write`.
Eli Bendersky831893a2012-10-09 07:18:16 -0700616 Returns a list of (optionally) encoded strings containing the XML data.
617 It does not guarantee any specific sequence, except that
Serhiy Storchaka5e028ae2014-02-06 21:10:41 +0200618 ``b"".join(tostringlist(element)) == tostring(element)``.
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000619
Ezio Melottif8754a62010-03-21 07:16:43 +0000620 .. versionadded:: 3.2
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000621
Eli Benderskya9a2ef52013-01-13 06:04:43 -0800622 .. versionadded:: 3.4
623 The *short_empty_elements* parameter.
624
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000625
626.. function:: XML(text, parser=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000627
628 Parses an XML section from a string constant. This function can be used to
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000629 embed "XML literals" in Python code. *text* is a string containing XML
630 data. *parser* is an optional parser instance. If not given, the standard
631 :class:`XMLParser` parser is used. Returns an :class:`Element` instance.
Georg Brandl116aa622007-08-15 14:28:22 +0000632
633
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000634.. function:: XMLID(text, parser=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000635
636 Parses an XML section from a string constant, and also returns a dictionary
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000637 which maps from element id:s to elements. *text* is a string containing XML
638 data. *parser* is an optional parser instance. If not given, the standard
639 :class:`XMLParser` parser is used. Returns a tuple containing an
640 :class:`Element` instance and a dictionary.
Georg Brandl116aa622007-08-15 14:28:22 +0000641
642
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000643.. _elementtree-element-objects:
Georg Brandl116aa622007-08-15 14:28:22 +0000644
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000645Element Objects
Eli Bendersky3a4875e2012-03-26 20:43:32 +0200646^^^^^^^^^^^^^^^
Georg Brandl116aa622007-08-15 14:28:22 +0000647
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000648.. class:: Element(tag, attrib={}, **extra)
Georg Brandl116aa622007-08-15 14:28:22 +0000649
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000650 Element class. This class defines the Element interface, and provides a
651 reference implementation of this interface.
Georg Brandl116aa622007-08-15 14:28:22 +0000652
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000653 The element name, attribute names, and attribute values can be either
654 bytestrings or Unicode strings. *tag* is the element name. *attrib* is
655 an optional dictionary, containing element attributes. *extra* contains
656 additional attributes, given as keyword arguments.
Georg Brandl116aa622007-08-15 14:28:22 +0000657
658
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000659 .. attribute:: tag
Georg Brandl116aa622007-08-15 14:28:22 +0000660
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000661 A string identifying what kind of data this element represents (the
662 element type, in other words).
Georg Brandl116aa622007-08-15 14:28:22 +0000663
664
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000665 .. attribute:: text
Ned Deilyeca04452015-08-17 22:11:17 -0400666 tail
Georg Brandl116aa622007-08-15 14:28:22 +0000667
Ned Deilyeca04452015-08-17 22:11:17 -0400668 These attributes can be used to hold additional data associated with
669 the element. Their values are usually strings but may be any
670 application-specific object. If the element is created from
671 an XML file, the *text* attribute holds either the text between
672 the element's start tag and its first child or end tag, or ``None``, and
673 the *tail* attribute holds either the text between the element's
674 end tag and the next tag, or ``None``. For the XML data
Georg Brandl116aa622007-08-15 14:28:22 +0000675
Ned Deilyeca04452015-08-17 22:11:17 -0400676 .. code-block:: xml
Georg Brandl116aa622007-08-15 14:28:22 +0000677
Ned Deilyeca04452015-08-17 22:11:17 -0400678 <a><b>1<c>2<d/>3</c></b>4</a>
Georg Brandl116aa622007-08-15 14:28:22 +0000679
Ned Deilyeca04452015-08-17 22:11:17 -0400680 the *a* element has ``None`` for both *text* and *tail* attributes,
681 the *b* element has *text* ``"1"`` and *tail* ``"4"``,
682 the *c* element has *text* ``"2"`` and *tail* ``None``,
683 and the *d* element has *text* ``None`` and *tail* ``"3"``.
684
685 To collect the inner text of an element, see :meth:`itertext`, for
686 example ``"".join(element.itertext())``.
687
688 Applications may store arbitrary objects in these attributes.
Georg Brandl116aa622007-08-15 14:28:22 +0000689
Georg Brandl116aa622007-08-15 14:28:22 +0000690
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000691 .. attribute:: attrib
Georg Brandl116aa622007-08-15 14:28:22 +0000692
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000693 A dictionary containing the element's attributes. Note that while the
694 *attrib* value is always a real mutable Python dictionary, an ElementTree
695 implementation may choose to use another internal representation, and
696 create the dictionary only if someone asks for it. To take advantage of
697 such implementations, use the dictionary methods below whenever possible.
Georg Brandl116aa622007-08-15 14:28:22 +0000698
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000699 The following dictionary-like methods work on the element attributes.
Georg Brandl116aa622007-08-15 14:28:22 +0000700
701
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000702 .. method:: clear()
Georg Brandl116aa622007-08-15 14:28:22 +0000703
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000704 Resets an element. This function removes all subelements, clears all
Eli Bendersky323a43a2012-10-09 06:46:33 -0700705 attributes, and sets the text and tail attributes to ``None``.
Georg Brandl116aa622007-08-15 14:28:22 +0000706
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000707
708 .. method:: get(key, default=None)
709
710 Gets the element attribute named *key*.
711
712 Returns the attribute value, or *default* if the attribute was not found.
713
714
715 .. method:: items()
716
717 Returns the element attributes as a sequence of (name, value) pairs. The
718 attributes are returned in an arbitrary order.
719
720
721 .. method:: keys()
722
723 Returns the elements attribute names as a list. The names are returned
724 in an arbitrary order.
725
726
727 .. method:: set(key, value)
728
729 Set the attribute *key* on the element to *value*.
730
731 The following methods work on the element's children (subelements).
732
733
734 .. method:: append(subelement)
735
Eli Bendersky396e8fc2012-03-23 14:24:20 +0200736 Adds the element *subelement* to the end of this element's internal list
737 of subelements. Raises :exc:`TypeError` if *subelement* is not an
738 :class:`Element`.
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000739
740
741 .. method:: extend(subelements)
Georg Brandl116aa622007-08-15 14:28:22 +0000742
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000743 Appends *subelements* from a sequence object with zero or more elements.
Eli Bendersky396e8fc2012-03-23 14:24:20 +0200744 Raises :exc:`TypeError` if a subelement is not an :class:`Element`.
Georg Brandl116aa622007-08-15 14:28:22 +0000745
Ezio Melottif8754a62010-03-21 07:16:43 +0000746 .. versionadded:: 3.2
Georg Brandl116aa622007-08-15 14:28:22 +0000747
Georg Brandl116aa622007-08-15 14:28:22 +0000748
Eli Bendersky737b1732012-05-29 06:02:56 +0300749 .. method:: find(match, namespaces=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000750
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000751 Finds the first subelement matching *match*. *match* may be a tag name
Eli Bendersky3a4875e2012-03-26 20:43:32 +0200752 or a :ref:`path <elementtree-xpath>`. Returns an element instance
Eli Bendersky737b1732012-05-29 06:02:56 +0300753 or ``None``. *namespaces* is an optional mapping from namespace prefix
754 to full name.
Georg Brandl116aa622007-08-15 14:28:22 +0000755
Georg Brandl116aa622007-08-15 14:28:22 +0000756
Eli Bendersky737b1732012-05-29 06:02:56 +0300757 .. method:: findall(match, namespaces=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000758
Eli Bendersky3a4875e2012-03-26 20:43:32 +0200759 Finds all matching subelements, by tag name or
760 :ref:`path <elementtree-xpath>`. Returns a list containing all matching
Eli Bendersky737b1732012-05-29 06:02:56 +0300761 elements in document order. *namespaces* is an optional mapping from
762 namespace prefix to full name.
Georg Brandl116aa622007-08-15 14:28:22 +0000763
Georg Brandl116aa622007-08-15 14:28:22 +0000764
Eli Bendersky737b1732012-05-29 06:02:56 +0300765 .. method:: findtext(match, default=None, namespaces=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000766
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000767 Finds text for the first subelement matching *match*. *match* may be
Eli Bendersky3a4875e2012-03-26 20:43:32 +0200768 a tag name or a :ref:`path <elementtree-xpath>`. Returns the text content
769 of the first matching element, or *default* if no element was found.
770 Note that if the matching element has no text content an empty string
Eli Bendersky737b1732012-05-29 06:02:56 +0300771 is returned. *namespaces* is an optional mapping from namespace prefix
772 to full name.
Georg Brandl116aa622007-08-15 14:28:22 +0000773
Georg Brandl116aa622007-08-15 14:28:22 +0000774
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000775 .. method:: getchildren()
Georg Brandl116aa622007-08-15 14:28:22 +0000776
Georg Brandl67b21b72010-08-17 15:07:14 +0000777 .. deprecated:: 3.2
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000778 Use ``list(elem)`` or iteration.
Georg Brandl116aa622007-08-15 14:28:22 +0000779
Georg Brandl116aa622007-08-15 14:28:22 +0000780
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000781 .. method:: getiterator(tag=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000782
Georg Brandl67b21b72010-08-17 15:07:14 +0000783 .. deprecated:: 3.2
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000784 Use method :meth:`Element.iter` instead.
Georg Brandl116aa622007-08-15 14:28:22 +0000785
Georg Brandl116aa622007-08-15 14:28:22 +0000786
Eli Bendersky396e8fc2012-03-23 14:24:20 +0200787 .. method:: insert(index, subelement)
Georg Brandl116aa622007-08-15 14:28:22 +0000788
Eli Bendersky396e8fc2012-03-23 14:24:20 +0200789 Inserts *subelement* at the given position in this element. Raises
790 :exc:`TypeError` if *subelement* is not an :class:`Element`.
Georg Brandl116aa622007-08-15 14:28:22 +0000791
Georg Brandl116aa622007-08-15 14:28:22 +0000792
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000793 .. method:: iter(tag=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000794
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000795 Creates a tree :term:`iterator` with the current element as the root.
796 The iterator iterates over this element and all elements below it, in
797 document (depth first) order. If *tag* is not ``None`` or ``'*'``, only
798 elements whose tag equals *tag* are returned from the iterator. If the
799 tree structure is modified during iteration, the result is undefined.
Georg Brandl116aa622007-08-15 14:28:22 +0000800
Ezio Melotti138fc892011-10-10 00:02:03 +0300801 .. versionadded:: 3.2
802
Georg Brandl116aa622007-08-15 14:28:22 +0000803
Eli Bendersky737b1732012-05-29 06:02:56 +0300804 .. method:: iterfind(match, namespaces=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000805
Eli Bendersky3a4875e2012-03-26 20:43:32 +0200806 Finds all matching subelements, by tag name or
807 :ref:`path <elementtree-xpath>`. Returns an iterable yielding all
Eli Bendersky737b1732012-05-29 06:02:56 +0300808 matching elements in document order. *namespaces* is an optional mapping
809 from namespace prefix to full name.
810
Georg Brandl116aa622007-08-15 14:28:22 +0000811
Ezio Melottif8754a62010-03-21 07:16:43 +0000812 .. versionadded:: 3.2
Georg Brandl116aa622007-08-15 14:28:22 +0000813
Georg Brandl116aa622007-08-15 14:28:22 +0000814
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000815 .. method:: itertext()
Georg Brandl116aa622007-08-15 14:28:22 +0000816
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000817 Creates a text iterator. The iterator loops over this element and all
818 subelements, in document order, and returns all inner text.
Georg Brandl116aa622007-08-15 14:28:22 +0000819
Ezio Melottif8754a62010-03-21 07:16:43 +0000820 .. versionadded:: 3.2
Georg Brandl116aa622007-08-15 14:28:22 +0000821
822
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000823 .. method:: makeelement(tag, attrib)
Georg Brandl116aa622007-08-15 14:28:22 +0000824
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000825 Creates a new element object of the same type as this element. Do not
826 call this method, use the :func:`SubElement` factory function instead.
Georg Brandl116aa622007-08-15 14:28:22 +0000827
828
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000829 .. method:: remove(subelement)
Georg Brandl116aa622007-08-15 14:28:22 +0000830
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000831 Removes *subelement* from the element. Unlike the find\* methods this
832 method compares elements based on the instance identity, not on tag value
833 or contents.
Georg Brandl116aa622007-08-15 14:28:22 +0000834
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000835 :class:`Element` objects also support the following sequence type methods
Serhiy Storchaka15e65902013-08-29 10:28:44 +0300836 for working with subelements: :meth:`~object.__delitem__`,
837 :meth:`~object.__getitem__`, :meth:`~object.__setitem__`,
838 :meth:`~object.__len__`.
Georg Brandl116aa622007-08-15 14:28:22 +0000839
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000840 Caution: Elements with no subelements will test as ``False``. This behavior
841 will change in future versions. Use specific ``len(elem)`` or ``elem is
842 None`` test instead. ::
Georg Brandl116aa622007-08-15 14:28:22 +0000843
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000844 element = root.find('foo')
Georg Brandl116aa622007-08-15 14:28:22 +0000845
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000846 if not element: # careful!
847 print("element not found, or element has no subelements")
Georg Brandl116aa622007-08-15 14:28:22 +0000848
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000849 if element is None:
850 print("element not found")
Georg Brandl116aa622007-08-15 14:28:22 +0000851
852
853.. _elementtree-elementtree-objects:
854
855ElementTree Objects
Eli Bendersky3a4875e2012-03-26 20:43:32 +0200856^^^^^^^^^^^^^^^^^^^
Georg Brandl116aa622007-08-15 14:28:22 +0000857
858
Georg Brandl7f01a132009-09-16 15:58:14 +0000859.. class:: ElementTree(element=None, file=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000860
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000861 ElementTree wrapper class. This class represents an entire element
862 hierarchy, and adds some extra support for serialization to and from
863 standard XML.
Georg Brandl116aa622007-08-15 14:28:22 +0000864
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000865 *element* is the root element. The tree is initialized with the contents
866 of the XML *file* if given.
Georg Brandl116aa622007-08-15 14:28:22 +0000867
868
Benjamin Petersone41251e2008-04-25 01:59:09 +0000869 .. method:: _setroot(element)
Georg Brandl116aa622007-08-15 14:28:22 +0000870
Benjamin Petersone41251e2008-04-25 01:59:09 +0000871 Replaces the root element for this tree. This discards the current
872 contents of the tree, and replaces it with the given element. Use with
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000873 care. *element* is an element instance.
Georg Brandl116aa622007-08-15 14:28:22 +0000874
875
Eli Bendersky737b1732012-05-29 06:02:56 +0300876 .. method:: find(match, namespaces=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000877
Eli Bendersky3a4875e2012-03-26 20:43:32 +0200878 Same as :meth:`Element.find`, starting at the root of the tree.
Georg Brandl116aa622007-08-15 14:28:22 +0000879
880
Eli Bendersky737b1732012-05-29 06:02:56 +0300881 .. method:: findall(match, namespaces=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000882
Eli Bendersky3a4875e2012-03-26 20:43:32 +0200883 Same as :meth:`Element.findall`, starting at the root of the tree.
Georg Brandl116aa622007-08-15 14:28:22 +0000884
885
Eli Bendersky737b1732012-05-29 06:02:56 +0300886 .. method:: findtext(match, default=None, namespaces=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000887
Eli Bendersky3a4875e2012-03-26 20:43:32 +0200888 Same as :meth:`Element.findtext`, starting at the root of the tree.
Georg Brandl116aa622007-08-15 14:28:22 +0000889
890
Georg Brandl7f01a132009-09-16 15:58:14 +0000891 .. method:: getiterator(tag=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000892
Georg Brandl67b21b72010-08-17 15:07:14 +0000893 .. deprecated:: 3.2
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000894 Use method :meth:`ElementTree.iter` instead.
Georg Brandl116aa622007-08-15 14:28:22 +0000895
896
Benjamin Petersone41251e2008-04-25 01:59:09 +0000897 .. method:: getroot()
Florent Xiclunac17f1722010-08-08 19:48:29 +0000898
Benjamin Petersone41251e2008-04-25 01:59:09 +0000899 Returns the root element for this tree.
Georg Brandl116aa622007-08-15 14:28:22 +0000900
901
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000902 .. method:: iter(tag=None)
903
904 Creates and returns a tree iterator for the root element. The iterator
905 loops over all elements in this tree, in section order. *tag* is the tag
Martin Panterd21e0b52015-10-10 10:36:22 +0000906 to look for (default is to return all elements).
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000907
908
Eli Bendersky737b1732012-05-29 06:02:56 +0300909 .. method:: iterfind(match, namespaces=None)
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000910
Eli Bendersky3a4875e2012-03-26 20:43:32 +0200911 Same as :meth:`Element.iterfind`, starting at the root of the tree.
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000912
Ezio Melottif8754a62010-03-21 07:16:43 +0000913 .. versionadded:: 3.2
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000914
915
Georg Brandl7f01a132009-09-16 15:58:14 +0000916 .. method:: parse(source, parser=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000917
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000918 Loads an external XML section into this element tree. *source* is a file
Antoine Pitrou11cb9612010-09-15 11:11:28 +0000919 name or :term:`file object`. *parser* is an optional parser instance.
Eli Bendersky52467b12012-06-01 07:13:08 +0300920 If not given, the standard :class:`XMLParser` parser is used. Returns the
921 section root element.
Georg Brandl116aa622007-08-15 14:28:22 +0000922
923
Eli Benderskyf96cf912012-07-15 06:19:44 +0300924 .. method:: write(file, encoding="us-ascii", xml_declaration=None, \
Serhiy Storchaka9e189f02013-01-13 22:24:27 +0200925 default_namespace=None, method="xml", *, \
Eli Benderskye9af8272013-01-13 06:27:51 -0800926 short_empty_elements=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000927
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000928 Writes the element tree to a file, as XML. *file* is a file name, or a
Eli Benderskyf96cf912012-07-15 06:19:44 +0300929 :term:`file object` opened for writing. *encoding* [1]_ is the output
930 encoding (default is US-ASCII).
931 *xml_declaration* controls if an XML declaration should be added to the
932 file. Use ``False`` for never, ``True`` for always, ``None``
933 for only if not US-ASCII or UTF-8 or Unicode (default is ``None``).
Serhiy Storchaka03530b92013-01-13 21:58:04 +0200934 *default_namespace* sets the default XML namespace (for "xmlns").
Eli Benderskyf96cf912012-07-15 06:19:44 +0300935 *method* is either ``"xml"``, ``"html"`` or ``"text"`` (default is
936 ``"xml"``).
Eli Benderskya9a2ef52013-01-13 06:04:43 -0800937 The keyword-only *short_empty_elements* parameter controls the formatting
Serhiy Storchakaa97cd2e2016-10-19 16:43:42 +0300938 of elements that contain no content. If ``True`` (the default), they are
Eli Benderskya9a2ef52013-01-13 06:04:43 -0800939 emitted as a single self-closed tag, otherwise they are emitted as a pair
940 of start/end tags.
Eli Benderskyf96cf912012-07-15 06:19:44 +0300941
942 The output is either a string (:class:`str`) or binary (:class:`bytes`).
943 This is controlled by the *encoding* argument. If *encoding* is
944 ``"unicode"``, the output is a string; otherwise, it's binary. Note that
945 this may conflict with the type of *file* if it's an open
946 :term:`file object`; make sure you do not try to write a string to a
947 binary stream and vice versa.
948
R David Murray575fb312013-12-25 23:21:03 -0500949 .. versionadded:: 3.4
950 The *short_empty_elements* parameter.
Eli Benderskya9a2ef52013-01-13 06:04:43 -0800951
Georg Brandl116aa622007-08-15 14:28:22 +0000952
Christian Heimesd8654cf2007-12-02 15:22:16 +0000953This is the XML file that is going to be manipulated::
954
955 <html>
956 <head>
957 <title>Example page</title>
958 </head>
959 <body>
Georg Brandl48310cd2009-01-03 21:18:54 +0000960 <p>Moved to <a href="http://example.org/">example.org</a>
Christian Heimesd8654cf2007-12-02 15:22:16 +0000961 or <a href="http://example.com/">example.com</a>.</p>
962 </body>
963 </html>
964
965Example of changing the attribute "target" of every link in first paragraph::
966
967 >>> from xml.etree.ElementTree import ElementTree
968 >>> tree = ElementTree()
969 >>> tree.parse("index.xhtml")
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000970 <Element 'html' at 0xb77e6fac>
Christian Heimesd8654cf2007-12-02 15:22:16 +0000971 >>> p = tree.find("body/p") # Finds first occurrence of tag p in body
972 >>> p
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000973 <Element 'p' at 0xb77ec26c>
974 >>> links = list(p.iter("a")) # Returns list of all links
Christian Heimesd8654cf2007-12-02 15:22:16 +0000975 >>> links
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000976 [<Element 'a' at 0xb77ec2ac>, <Element 'a' at 0xb77ec1cc>]
Christian Heimesd8654cf2007-12-02 15:22:16 +0000977 >>> for i in links: # Iterates through all found links
978 ... i.attrib["target"] = "blank"
979 >>> tree.write("output.xhtml")
Georg Brandl116aa622007-08-15 14:28:22 +0000980
981.. _elementtree-qname-objects:
982
983QName Objects
Eli Bendersky3a4875e2012-03-26 20:43:32 +0200984^^^^^^^^^^^^^
Georg Brandl116aa622007-08-15 14:28:22 +0000985
986
Georg Brandl7f01a132009-09-16 15:58:14 +0000987.. class:: QName(text_or_uri, tag=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000988
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000989 QName wrapper. This can be used to wrap a QName attribute value, in order
990 to get proper namespace handling on output. *text_or_uri* is a string
991 containing the QName value, in the form {uri}local, or, if the tag argument
992 is given, the URI part of a QName. If *tag* is given, the first argument is
Martin Panter6245cb32016-04-15 02:14:19 +0000993 interpreted as a URI, and this argument is interpreted as a local name.
Florent Xiclunaf15351d2010-03-13 23:24:31 +0000994 :class:`QName` instances are opaque.
Georg Brandl116aa622007-08-15 14:28:22 +0000995
996
Antoine Pitrou5b235d02013-04-18 19:37:06 +0200997
Georg Brandl116aa622007-08-15 14:28:22 +0000998.. _elementtree-treebuilder-objects:
999
1000TreeBuilder Objects
Eli Bendersky3a4875e2012-03-26 20:43:32 +02001001^^^^^^^^^^^^^^^^^^^
Georg Brandl116aa622007-08-15 14:28:22 +00001002
1003
Georg Brandl7f01a132009-09-16 15:58:14 +00001004.. class:: TreeBuilder(element_factory=None)
Georg Brandl116aa622007-08-15 14:28:22 +00001005
Florent Xiclunaf15351d2010-03-13 23:24:31 +00001006 Generic element structure builder. This builder converts a sequence of
1007 start, data, and end method calls to a well-formed element structure. You
1008 can use this class to build an element structure using a custom XML parser,
Eli Bendersky48d358b2012-05-30 17:57:50 +03001009 or a parser for some other XML-like format. *element_factory*, when given,
1010 must be a callable accepting two positional arguments: a tag and
1011 a dict of attributes. It is expected to return a new element instance.
Georg Brandl116aa622007-08-15 14:28:22 +00001012
Benjamin Petersone41251e2008-04-25 01:59:09 +00001013 .. method:: close()
Georg Brandl116aa622007-08-15 14:28:22 +00001014
Florent Xiclunaf15351d2010-03-13 23:24:31 +00001015 Flushes the builder buffers, and returns the toplevel document
1016 element. Returns an :class:`Element` instance.
Georg Brandl116aa622007-08-15 14:28:22 +00001017
1018
Benjamin Petersone41251e2008-04-25 01:59:09 +00001019 .. method:: data(data)
Georg Brandl116aa622007-08-15 14:28:22 +00001020
Florent Xiclunaf15351d2010-03-13 23:24:31 +00001021 Adds text to the current element. *data* is a string. This should be
1022 either a bytestring, or a Unicode string.
Georg Brandl116aa622007-08-15 14:28:22 +00001023
1024
Benjamin Petersone41251e2008-04-25 01:59:09 +00001025 .. method:: end(tag)
Georg Brandl116aa622007-08-15 14:28:22 +00001026
Florent Xiclunaf15351d2010-03-13 23:24:31 +00001027 Closes the current element. *tag* is the element name. Returns the
1028 closed element.
Georg Brandl116aa622007-08-15 14:28:22 +00001029
1030
Benjamin Petersone41251e2008-04-25 01:59:09 +00001031 .. method:: start(tag, attrs)
Georg Brandl116aa622007-08-15 14:28:22 +00001032
Florent Xiclunaf15351d2010-03-13 23:24:31 +00001033 Opens a new element. *tag* is the element name. *attrs* is a dictionary
1034 containing element attributes. Returns the opened element.
Georg Brandl116aa622007-08-15 14:28:22 +00001035
1036
Florent Xiclunaf15351d2010-03-13 23:24:31 +00001037 In addition, a custom :class:`TreeBuilder` object can provide the
1038 following method:
Georg Brandl116aa622007-08-15 14:28:22 +00001039
Florent Xiclunaf15351d2010-03-13 23:24:31 +00001040 .. method:: doctype(name, pubid, system)
1041
1042 Handles a doctype declaration. *name* is the doctype name. *pubid* is
1043 the public identifier. *system* is the system identifier. This method
1044 does not exist on the default :class:`TreeBuilder` class.
1045
Ezio Melottif8754a62010-03-21 07:16:43 +00001046 .. versionadded:: 3.2
Georg Brandl116aa622007-08-15 14:28:22 +00001047
1048
Florent Xiclunaf15351d2010-03-13 23:24:31 +00001049.. _elementtree-xmlparser-objects:
Georg Brandl116aa622007-08-15 14:28:22 +00001050
Florent Xiclunaf15351d2010-03-13 23:24:31 +00001051XMLParser Objects
Eli Bendersky3a4875e2012-03-26 20:43:32 +02001052^^^^^^^^^^^^^^^^^
Florent Xiclunaf15351d2010-03-13 23:24:31 +00001053
1054
1055.. class:: XMLParser(html=0, target=None, encoding=None)
1056
Eli Benderskyb5869342013-08-30 05:51:20 -07001057 This class is the low-level building block of the module. It uses
1058 :mod:`xml.parsers.expat` for efficient, event-based parsing of XML. It can
Georg Brandladeffcc2016-02-26 19:13:47 +01001059 be fed XML data incrementally with the :meth:`feed` method, and parsing
1060 events are translated to a push API - by invoking callbacks on the *target*
1061 object. If *target* is omitted, the standard :class:`TreeBuilder` is used.
1062 The *html* argument was historically used for backwards compatibility and is
1063 now deprecated. If *encoding* [1]_ is given, the value overrides the
1064 encoding specified in the XML file.
Georg Brandl116aa622007-08-15 14:28:22 +00001065
Eli Benderskyb5869342013-08-30 05:51:20 -07001066 .. deprecated:: 3.4
Larry Hastings3732ed22014-03-15 21:13:56 -07001067 The *html* argument. The remaining arguments should be passed via
Georg Brandladeffcc2016-02-26 19:13:47 +01001068 keyword to prepare for the removal of the *html* argument.
Georg Brandl116aa622007-08-15 14:28:22 +00001069
Benjamin Petersone41251e2008-04-25 01:59:09 +00001070 .. method:: close()
Georg Brandl116aa622007-08-15 14:28:22 +00001071
Eli Benderskybfd78372013-08-24 15:11:44 -07001072 Finishes feeding data to the parser. Returns the result of calling the
Eli Benderskybf8ab772013-08-25 15:27:36 -07001073 ``close()`` method of the *target* passed during construction; by default,
1074 this is the toplevel document element.
Georg Brandl116aa622007-08-15 14:28:22 +00001075
1076
Benjamin Petersone41251e2008-04-25 01:59:09 +00001077 .. method:: doctype(name, pubid, system)
Georg Brandl116aa622007-08-15 14:28:22 +00001078
Georg Brandl67b21b72010-08-17 15:07:14 +00001079 .. deprecated:: 3.2
Florent Xiclunaf15351d2010-03-13 23:24:31 +00001080 Define the :meth:`TreeBuilder.doctype` method on a custom TreeBuilder
1081 target.
Georg Brandl116aa622007-08-15 14:28:22 +00001082
1083
Benjamin Petersone41251e2008-04-25 01:59:09 +00001084 .. method:: feed(data)
Georg Brandl116aa622007-08-15 14:28:22 +00001085
Florent Xiclunaf15351d2010-03-13 23:24:31 +00001086 Feeds data to the parser. *data* is encoded data.
Georg Brandl116aa622007-08-15 14:28:22 +00001087
Eli Benderskyb5869342013-08-30 05:51:20 -07001088 :meth:`XMLParser.feed` calls *target*\'s ``start(tag, attrs_dict)`` method
1089 for each opening tag, its ``end(tag)`` method for each closing tag, and data
1090 is processed by method ``data(data)``. :meth:`XMLParser.close` calls
1091 *target*\'s method ``close()``. :class:`XMLParser` can be used not only for
1092 building a tree structure. This is an example of counting the maximum depth
1093 of an XML file::
Christian Heimesd8654cf2007-12-02 15:22:16 +00001094
Florent Xiclunaf15351d2010-03-13 23:24:31 +00001095 >>> from xml.etree.ElementTree import XMLParser
Christian Heimesd8654cf2007-12-02 15:22:16 +00001096 >>> class MaxDepth: # The target object of the parser
1097 ... maxDepth = 0
1098 ... depth = 0
1099 ... def start(self, tag, attrib): # Called for each opening tag.
Georg Brandl48310cd2009-01-03 21:18:54 +00001100 ... self.depth += 1
Christian Heimesd8654cf2007-12-02 15:22:16 +00001101 ... if self.depth > self.maxDepth:
1102 ... self.maxDepth = self.depth
1103 ... def end(self, tag): # Called for each closing tag.
1104 ... self.depth -= 1
Georg Brandl48310cd2009-01-03 21:18:54 +00001105 ... def data(self, data):
Christian Heimesd8654cf2007-12-02 15:22:16 +00001106 ... pass # We do not need to do anything with data.
1107 ... def close(self): # Called when all data has been parsed.
1108 ... return self.maxDepth
Georg Brandl48310cd2009-01-03 21:18:54 +00001109 ...
Christian Heimesd8654cf2007-12-02 15:22:16 +00001110 >>> target = MaxDepth()
Florent Xiclunaf15351d2010-03-13 23:24:31 +00001111 >>> parser = XMLParser(target=target)
Christian Heimesd8654cf2007-12-02 15:22:16 +00001112 >>> exampleXml = """
1113 ... <a>
1114 ... <b>
1115 ... </b>
1116 ... <b>
1117 ... <c>
1118 ... <d>
1119 ... </d>
1120 ... </c>
1121 ... </b>
1122 ... </a>"""
1123 >>> parser.feed(exampleXml)
1124 >>> parser.close()
1125 4
Christian Heimesb186d002008-03-18 15:15:01 +00001126
Eli Benderskyb5869342013-08-30 05:51:20 -07001127
1128.. _elementtree-xmlpullparser-objects:
1129
1130XMLPullParser Objects
1131^^^^^^^^^^^^^^^^^^^^^
1132
1133.. class:: XMLPullParser(events=None)
1134
Eli Bendersky2c68e302013-08-31 07:37:23 -07001135 A pull parser suitable for non-blocking applications. Its input-side API is
1136 similar to that of :class:`XMLParser`, but instead of pushing calls to a
1137 callback target, :class:`XMLPullParser` collects an internal list of parsing
1138 events and lets the user read from it. *events* is a sequence of events to
1139 report back. The supported events are the strings ``"start"``, ``"end"``,
1140 ``"start-ns"`` and ``"end-ns"`` (the "ns" events are used to get detailed
1141 namespace information). If *events* is omitted, only ``"end"`` events are
1142 reported.
Eli Benderskyb5869342013-08-30 05:51:20 -07001143
1144 .. method:: feed(data)
1145
1146 Feed the given bytes data to the parser.
1147
1148 .. method:: close()
1149
Nick Coghlan4cc2afa2013-09-28 23:50:35 +10001150 Signal the parser that the data stream is terminated. Unlike
1151 :meth:`XMLParser.close`, this method always returns :const:`None`.
1152 Any events not yet retrieved when the parser is closed can still be
1153 read with :meth:`read_events`.
Eli Benderskyb5869342013-08-30 05:51:20 -07001154
1155 .. method:: read_events()
1156
R David Murray410d3202014-01-04 23:52:50 -05001157 Return an iterator over the events which have been encountered in the
1158 data fed to the
1159 parser. The iterator yields ``(event, elem)`` pairs, where *event* is a
Eli Benderskyb5869342013-08-30 05:51:20 -07001160 string representing the type of event (e.g. ``"end"``) and *elem* is the
Nick Coghlan4cc2afa2013-09-28 23:50:35 +10001161 encountered :class:`Element` object.
1162
1163 Events provided in a previous call to :meth:`read_events` will not be
R David Murray410d3202014-01-04 23:52:50 -05001164 yielded again. Events are consumed from the internal queue only when
1165 they are retrieved from the iterator, so multiple readers iterating in
1166 parallel over iterators obtained from :meth:`read_events` will have
1167 unpredictable results.
Eli Benderskyb5869342013-08-30 05:51:20 -07001168
1169 .. note::
1170
1171 :class:`XMLPullParser` only guarantees that it has seen the ">"
1172 character of a starting tag when it emits a "start" event, so the
1173 attributes are defined, but the contents of the text and tail attributes
1174 are undefined at that point. The same applies to the element children;
1175 they may or may not be present.
1176
1177 If you need a fully populated element, look for "end" events instead.
1178
1179 .. versionadded:: 3.4
1180
Eli Bendersky5b77d812012-03-16 08:20:05 +02001181Exceptions
Eli Bendersky3a4875e2012-03-26 20:43:32 +02001182^^^^^^^^^^
Eli Bendersky5b77d812012-03-16 08:20:05 +02001183
1184.. class:: ParseError
1185
1186 XML parse error, raised by the various parsing methods in this module when
1187 parsing fails. The string representation of an instance of this exception
1188 will contain a user-friendly error message. In addition, it will have
1189 the following attributes available:
1190
1191 .. attribute:: code
1192
1193 A numeric error code from the expat parser. See the documentation of
1194 :mod:`xml.parsers.expat` for the list of error codes and their meanings.
1195
1196 .. attribute:: position
1197
1198 A tuple of *line*, *column* numbers, specifying where the error occurred.
Christian Heimesb186d002008-03-18 15:15:01 +00001199
1200.. rubric:: Footnotes
1201
Serhiy Storchakad97b7dc2017-05-16 23:18:09 +03001202.. [1] The encoding string included in XML output should conform to the
Florent Xiclunaf15351d2010-03-13 23:24:31 +00001203 appropriate standards. For example, "UTF-8" is valid, but "UTF8" is
Serhiy Storchaka6dff0202016-05-07 10:49:07 +03001204 not. See https://www.w3.org/TR/2006/REC-xml11-20060816/#NT-EncodingDecl
1205 and https://www.iana.org/assignments/character-sets/character-sets.xhtml.