Ответ 1
Я знаю, что это уже сейчас, но я наткнулся на этот ответ выше о том, как сохранить комментарии. Frederik опубликованные инструкции о том, как помещать комментарии в дерево, по-прежнему работает с текущими версиями ElementTree, но делает больше, чем это необходимо для моего использования, по крайней мере. Он обертывает XML в элемент, что нежелательно для меня. Мне также не нужны инструкции по обработке, но только комментарии. Итак, я урезал класс, который он предоставил на сайте, чтобы это:
import xml.etree.ElementTree as ET
class PCParser(ET.XMLTreeBuilder):
def __init__(self):
ET.XMLTreeBuilder.__init__(self)
# assumes ElementTree 1.2.X
self._parser.CommentHandler = self.handle_comment
def handle_comment(self, data):
self._target.start(ET.Comment, {})
self._target.data(data)
self._target.end(ET.Comment)
Чтобы использовать это, создайте экземпляр этого объекта как "парсер", а затем передайте его как параметр ElementTree.parse() следующим образом:
parser = PCParser()
self.tree = ET.parse(self.templateOut, parser=parser)
Я не беру на себя никакой ответственности за код или за недокументированное использование ElementTree, но он работает для меня в сохранении только комментариев, не затрагивая исходную структуру документа. И обратите внимание, что любое будущее изменение ElementTree (кажется маловероятным в этот момент после всех этих лет, хотя) нарушит это.