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