Python Glossary English

Python 3.4+xml.etree.ElementTreeпонятие

xml.etree.ElementTree.XMLPullParser

потоковый разбор

Неблокирующий парсер: данные подаются кусками через feed(), а готовые события забираются read_events() — для сети и асинхронного кода.

Синтаксис

parser = ET.XMLPullParser(events=None)
parser.feed(data)
for event, elem in parser.read_events(): ...

В отличие от iterparse, он сам ничего не читает: вы решаете, откуда и когда брать данные. read_events() отдаёт только новые события, повторно уже прочитанные не приходят. close() всегда возвращает None, а не корень, как XMLParser.close(), — корень берите из события 'end' верхнего элемента. Новые версии expat могут придерживать незаконченный токен до следующего feed(); с 3.13 есть flush().

Примеры

import xml.etree.ElementTree as ET
p = ET.XMLPullParser(events=('end',))
for chunk in ['<log><e>a</e>', '<e>b</e>', '</log>']:
    p.feed(chunk)
    print([el.text for ev, el in p.read_events() if el.tag == 'e'])
# → ['a'] / ['b'] / []
print(p.close())  # → None

См. также

Частые ошибки

Открыть в полном глоссарииdocs.python.orgСообщить о неточности