Сохранение измененной ошибки xml Объект «ElementTree» не имеет атрибута «тег»

Код

При запуске следующего кода я не могу сохранить вывод в виде XML-файла, так как получаю следующую ошибку AttributeError: объект «ElementTree» не имеет атрибута «тег» (в трассировке). На SO есть вопрос с аналогичным названием, но я не думаю, что он имеет отношение к моему, поскольку он был связан с разбором из корневого узла, а не с сохранением.

Код

import xml.etree.ElementTree as ET
print('\n'*5)

xmlfile = 'widget.XML'

tree = ET.parse(xmlfile)
root = tree.getroot()

#ET.dump(tree)# prints the xml file to console,shows xml indentation
print('\n'*2)
for elm in root.findall("./Common/ForceBinary"):
    print(elm.attrib)
    elm.attrib = {'type': 'integer', 'value': '0'}

with open("new_file.xml", "w") as f:
    f.write(ET.tostring(tree))

Выслеживать

{'type': 'integer', 'value': '1'}
Traceback (most recent call last):
  File "/Users/user/Desktop/MY_PY/x_08.py", line 16, in <module>
    f.write(ET.tostring(tree))
  File "/Users/user/opt/anaconda3/lib/python3.7/xml/etree/ElementTree.py", line 1136, in tostring
    short_empty_elements=short_empty_elements)
  File "/Users/user/opt/anaconda3/lib/python3.7/xml/etree/ElementTree.py", line 777, in write
    short_empty_elements=short_empty_elements)
  File "/Users/user/opt/anaconda3/lib/python3.7/xml/etree/ElementTree.py", line 901, in _serialize_xml
    tag = elem.tag
AttributeError: 'ElementTree' object has no attribute 'tag'
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
1 939
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробовав довольно много методов для записи вывода в файл xml, эта строка сработала (я не знаю, почему, если у кого-то есть объяснение, я был бы рад принять его как ответ).

tree.write("sdn_edit2.xml")
Ответ принят как подходящий

ElementTree.tostring() работает с Element, что не совпадает с ElementTree. Вы уже извлекли корневой узел через tree.getroot() — вместо этого вам просто нужно ET.tostring(root).

Причина, по которой API является таким, заключается в том, что Element предназначен в качестве структуры данных для анализируемого в памяти XML-объекта, а ElementTree в основном просто помощник сериализации-десериализации (возможно, именование Tree было не лучшей идеей) для соединения этих Element с внешним миром.

Связанный вопрос о разнице между ними: В чем разница между ElementTree и Element? (питон xml)

Как тогда записать xml в файл?

Windy71 15.12.2020 08:32

Как и в случае с любой другой строкой, и как вы пытались в своем вопросе, откройте файл и f.write() к нему. Вы просили объяснить, почему исходное решение не сработало, и вот оно — однако, если запись XML в файл — это все, что вам нужно, ярлык tree.write() — это то, что вам нужно.

Mike Roll 15.12.2020 10:10

Спасибо, Майк, очень признателен.

Windy71 15.12.2020 10:15

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