Можно ли удалить элементы lxml / libxml2, которые появляются перед корнем документа, без копирования всего дерева? - PullRequest
0 голосов
/ 06 февраля 2019

С помощью API lxml можно получить доступ к предварительным элементам перед корнем, таким как инструкции по обработке и комментарии, запросив родного брата (и его братьев по очереди) корневого элемента:

>>> buffer = StringIO('<?xml version="1.0" ?><?PI foo?><root/>')
>>> doc = etree.parse(buffer)
>>> root = doc.getroot()
>>> pi = root.getprevious()
>>> str(pi)
'<?PI foo?>'

Для удаленияэлемент из документа, однако должен быть задействован родительский элемент:

parent.remove(child)

Очевидно, что для этого элемента инструкции обработки нет родительского элемента.Я мог бы глубоко скопировать корень, чтобы получить другое дерево без предыдущих братьев и сестер, но это, очевидно, не является предпочтительным решением.Кто-нибудь знает решение для достижения такого удаления, которое не требует поясняющего комментария в коде?(Перенос объяснения на имя функции не будет считаться ответом.)

...