Element Tree - перебор словаря для добавления элементов в новую строку xml

Я пытаюсь добавить элементы в существующий .xml, используя ElementTree.

У меня есть нужные атрибуты, хранящиеся в виде списка словарей:

myDict = [{"name": "dan",
           "age": "25",
           "subject":"maths"},
          {"name": "susan",
           "age": "27",
           "subject":"english"},
          {"name": "leo",
           "age": "24",
           "subject":"psychology"}]

И я использую следующий код для добавления:

import xml.etree.ElementTree as ET
tree = ET.parse('<path to existing .xml')
root = tree.getroot()

for x,y in enumerate(myDict):
    root.append(ET.Element("student", attrib=myDict[x]))

tree.write('<path to .xml>')

В основном это работает нормально, за исключением того, что все элементы добавляются в виде одной строки. Я хотел бы, чтобы каждый элемент добавлялся в новую строку:

# Not this:
<student name='dan' age='25' subject='maths' /><student name='susan' age='27' subject='english' /><student name='leo' age='24' subject='psychology' />

# But this:
<student name='dan' age='25' subject='maths' />
<student name='susan' age='27' subject='english' />
<student name='leo' age='24' subject='psychology' />

Я попытался использовать lxml и передать аргумент pretty_print=True в вызове tree.write, но это не дало никакого эффекта.

Я уверен, что мне не хватает чего-то простого, поэтому ваша помощь приветствуется!

Этот вопрос был о той же проблеме.
Gandhi 22.11.2022 10:20

Итак, согласно этому, я добавляю tail = "\n" при назначении атрибутов? root.append(ET.Element("student", attrib=myDict[x], tail='\n')). Я должен ошибаться, кажется, не работает.

r0bt 22.11.2022 10:50

НВМ. Сортировал. Добавлю свои изменения в качестве ответа для ясности. Спасибо за указатель @Thicc_Gandhi

r0bt 22.11.2022 11:00

Вы пробовали indent()? stackoverflow.com/a/68618047/407651

mzjn 22.11.2022 11:01
Почему в 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
4
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

С указателями из здесь (спасибо @Thicc_Gandhi), я решил это, изменив итерацию на:

for x,y in enumerate(MyDict):
    elem = ET.Element("student",attrib=myDict[x])
    elem.tail = "\n"
    root.append(elem)

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