Поиск комментариев xml верхнего уровня с использованием ElementTree Python

Я разбираю файл xml с помощью ElementTree Python, например:

et = ElementTree(file=file("test.xml"))

test.xml начинается с нескольких строк комментариев xml.

Есть ли способ получить эти комментарии от et?


person Paul Oyster    schedule 12.02.2009    source источник


Ответы (2)


Для ElementTree 1.2.X есть статья о Чтение инструкций по обработке и комментариев с помощью ElementTree ( http://effbot.org/zone/element-pi.htm).


ИЗМЕНИТЬ:

Альтернативой может быть использование lxml.etree, реализующего ElementTree API. Цитата из Совместимость с ElementTree для lxml.etree:

ElementTree игнорирует комментарии и инструкции по обработке при синтаксическом анализе XML, в то время как etree считывает их и обрабатывает как элементы Comment или ProcessingInstruction соответственно.

person f3lix    schedule 12.02.2009
comment
к сожалению, в версии, поставляемой с python 2.5, нет CommentHandler. - person Paul Oyster; 12.02.2009
comment
Кроме того, слишком рискованно использовать внутренние библиотеки, так как код должен работать с будущими версиями Python. - person Paul Oyster; 12.02.2009
comment
Это законные аргументы. Я отредактировал свой ответ и добавил альтернативное решение. - person f3lix; 12.02.2009

Да, есть способ.

from xml.etree import ElementTree

def parseXml (fn):
    try:
        target = ElementTree.TreeBuilder (insert_comments=True)
        parser = ElementTree.XMLParser(target=target, encoding='utf-8')
        et = ElementTree.parse (fn, parser)
    except Exception as e:
        print ("%s: %s" % (fn, str (e)))
        return

    for el in et.getroot ():
        print (el)

То же самое относится и к инструкциям обработки (ElementTree.PI), они будут вставлены в результирующую структуру, только если insert_pis=true.

person Andrey Zabolotnyi    schedule 07.05.2020
comment
Обратите внимание, что для этого требуется Python 3.8. - person mzjn; 07.05.2020