все Python 3xml.etree.ElementTreeпонятие
xml.etree.ElementTree.TreeBuilder
разбор
Собирает дерево Element из вызовов start/data/end — стандартная цель XMLParser; пригодится и для построения дерева из не-XML формата.
Синтаксис
tb = ET.TreeBuilder(element_factory=None, *, comment_factory=None, pi_factory=None, insert_comments=False, insert_pis=False)
Комментарии и инструкции обработки по умолчанию в дерево не попадают — их сохраняет TreeBuilder(insert_comments=True, insert_pis=True), переданный как target в XMLParser (с 3.8), и только внутри корня. Без парсера им можно собрать дерево из любого источника событий, следя за парностью start/end. data() можно звать несколько раз подряд — куски склеиваются в text или tail.
Примеры
import xml.etree.ElementTree as ET
tb = ET.TreeBuilder()
tb.start('a', {'k': 'v'})
tb.data('hi')
tb.data('!')
tb.end('a')
print(ET.tostring(tb.close(), encoding='unicode')) # → <a k="v">hi!</a>
import xml.etree.ElementTree as ET
xml = '<a><!-- note --><b/></a>'
print(len(ET.fromstring(xml))) # → 1 — комментарий выброшен
p = ET.XMLParser(target=ET.TreeBuilder(insert_comments=True))
p.feed(xml)
root = p.close()
print(len(root), root[0].tag is ET.Comment) # → 2 True
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности