Как с помощью ElementTree разместить комментарий сразу после объявления XML и над корневым элементом?
Я пробовал root.append(comment), но это помещает комментарий как последний дочерний элемент root. Могу ли я добавить комментарий к тому, что является родителем root?
Спасибо.
Ты прав. Это дубликат.
@mzjn Спасибо за ссылку. Я смог найти ссылку на решение оттуда. stackoverflow.com/questions/8868248/… К сожалению, это означает небольшой обход ElementTree.






Здесь
import xml.etree.ElementTree as ET
root = ET.fromstring('<root><e1><e2></e2></e1></root>')
comment = ET.Comment('Here is a Comment')
root.insert(0, comment)
ET.dump(root)
выход
<root><!--Here is a Comment--><e1><e2 /></e1></root>
Этот комментарий является дочерним элементом <root>, но ОП хочет его раньше <root>.
Это невозможно.
Вот как можно добавить комментарий в нужную позицию (после объявления XML, перед корневым элементом) с помощью lxml, используя метод addprevious().
from lxml import etree
root = etree.fromstring('<root><x>y</x></root>')
comment = etree.Comment('This is a comment')
root.addprevious(comment) # Add the comment as a preceding sibling
etree.ElementTree(root).write("out.xml",
pretty_print=True,
encoding = "UTF-8",
xml_declaration=True)
Результат (out.xml):
<?xml version='1.0' encoding='UTF-8'?>
<!--This is a comment-->
<root>
<x>y</x>
</root>
Дубликат stackoverflow.com/q/54791900/407651, на который нет ответа.