summaryrefslogtreecommitdiffstats
path: root/Doc
diff options
context:
space:
mode:
authorEli Bendersky <eliben@gmail.com>2013-04-20 16:06:27 (GMT)
committerEli Bendersky <eliben@gmail.com>2013-04-20 16:06:27 (GMT)
commit3bdead1113d6d6e5e998152167e8b1faa82580c1 (patch)
tree42197e4c0d150f70881ee90cc17f1a538942ef65 /Doc
parentddcc6798f6614b6bbc69d7d8f35f934cd0deb42b (diff)
downloadcpython-3bdead1113d6d6e5e998152167e8b1faa82580c1.zip
cpython-3bdead1113d6d6e5e998152167e8b1faa82580c1.tar.gz
cpython-3bdead1113d6d6e5e998152167e8b1faa82580c1.tar.bz2
Add some documentation for IncrementalParesr
Diffstat (limited to 'Doc')
-rw-r--r--Doc/library/xml.etree.elementtree.rst37
1 files changed, 35 insertions, 2 deletions
diff --git a/Doc/library/xml.etree.elementtree.rst b/Doc/library/xml.etree.elementtree.rst
index 405512b..1fae0fe 100644
--- a/Doc/library/xml.etree.elementtree.rst
+++ b/Doc/library/xml.etree.elementtree.rst
@@ -105,6 +105,38 @@ Children are nested, and we can access specific child nodes by index::
>>> root[0][1].text
'2008'
+Incremental parsing
+^^^^^^^^^^^^^^^^^^^
+
+It's possible to parse XML incrementally (i.e. not the whole document at once).
+The most powerful tool for doing this is :class:`IncrementalParser`. It does
+not require a blocking read to obtain the XML data, and is instead fed with
+data incrementally with :meth:`IncrementalParser.data_received` calls. To get
+the parsed XML elements, call :meth:`IncrementalParser.events`. Here's an
+example::
+
+ >>> incparser = ET.IncrementalParser(['start', 'end'])
+ >>> incparser.data_received('<mytag>sometext')
+ >>> list(incparser.events())
+ [('start', <Element 'mytag' at 0x7fba3f2a8688>)]
+ >>> incparser.data_received(' more text</mytag>')
+ >>> for event, elem in incparser.events():
+ ... print(event)
+ ... print(elem.tag, 'text=', elem.text)
+ ...
+ end
+ mytag text= sometext more text
+
+The obvious use case is applications that operate in an asynchronous fashion
+where the XML data is being received from a socket or read incrementally from
+some storage device. In such cases, blocking reads are unacceptable.
+
+Because it's so flexible, :class:`IncrementalParser` can be inconvenient
+to use for simpler use-cases. If you don't mind your application blocking on
+reading XML data but would still like to have incremental parsing capabilities,
+take a look at :func:`iterparse`. It can be useful when you're reading a large
+XML document and don't want to hold it wholly in memory.
+
Finding interesting elements
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -840,7 +872,6 @@ QName Objects
IncrementalParser Objects
^^^^^^^^^^^^^^^^^^^^^^^^^
-
.. class:: IncrementalParser(events=None, parser=None)
An incremental, event-driven parser suitable for non-blocking applications.
@@ -864,7 +895,9 @@ IncrementalParser Objects
Iterate over the events which have been encountered in the data fed
to the parser. This method yields ``(event, elem)`` pairs, where
*event* is a string representing the type of event (e.g. ``"end"``)
- and *elem* is the encountered :class:`Element` object.
+ and *elem* is the encountered :class:`Element` object. Events
+ provided in a previous call to :meth:`events` will not be yielded
+ again.
.. note::