Добавить комментарий в начало документа

Как с помощью ElementTree разместить комментарий сразу после объявления XML и над корневым элементом?

Я пробовал root.append(comment), но это помещает комментарий как последний дочерний элемент root. Могу ли я добавить комментарий к тому, что является родителем root?

Спасибо.

Дубликат stackoverflow.com/q/54791900/407651, на который нет ответа.

mzjn 04.07.2019 14:27

Ты прав. Это дубликат.

posfan12 04.07.2019 14:40

@mzjn Спасибо за ссылку. Я смог найти ссылку на решение оттуда. stackoverflow.com/questions/8868248/… К сожалению, это означает небольшой обход ElementTree.

posfan12 04.07.2019 15:12
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
454
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Здесь

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>.

mzjn 04.07.2019 14:25

Это невозможно.

balderman 04.07.2019 14:55
Ответ принят как подходящий

Вот как можно добавить комментарий в нужную позицию (после объявления 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>

Другие вопросы по теме