У объекта xml.etree.ElementTree.Element нет атрибута «write», как писать XML из этого - PullRequest
0 голосов
/ 20 июня 2019

Я читаю строку XML, редактирую ее, а затем хочу снова вывести ее в виде файла XML.

Однако я получаю упомянутую ошибку в заголовке, когда выполняю .write()

Я обнаружил, что когда вы читаете XML-строку, используя ElementTree.fromstring(string), она фактически создает ElementTree.Element, а не ElementTree.У элемента нет метода записи, а у ElementTree.

Мои вопросы: во-первых, как я могу записать элемент в xml-файл?Или как я могу создать ElementTree и добавить к нему свой Элемент, а затем использовать метод .write?

Во-вторых, есть ли какие-либо последствия, о которых мне следует знать при любом из двух решений?

1 Ответ

0 голосов
/ 20 июня 2019

Я обнаружил, что когда вы читаете XML-строку, используя ElementTree.fromstring(string), она на самом деле создаст ElementTree.Element, а не ElementTree.

Да, вы получаете элемент верхнего уровня (также называемый «элементом документа»).

Элемент не имеет write метода, но ElementTree имеет.

Подпись конструктора ElementTree выглядит следующим образом:

class xml.etree.ElementTree.ElementTree(element=None, file=None)

Следовательно, это совершенно просто:

import xml.etree.ElementTree as ET

doc = ET.fromstring("<test>test öäü</test>")

tree = ET.ElementTree(doc)
tree.write("test.xml", encoding="utf-8")

Вы всегда должны указывать кодировку при записи файла XML. В большинстве случаев UTF-8 - лучший выбор.

...