python ElementTree.tostring (tree) не выполнен, но ElementTree.tostring (tree.getroot ()) ОК, не могу представить разницу - PullRequest
0 голосов
/ 18 мая 2018

Я не понимаю ошибку, которую я добавляю с моим примером кода ниже

import xml.etree.ElementTree as ET
with open('sheet_short.xml','r') as f:
   tree = ET.parse(f)
#
# some processing
#
xml_str = ET.tostring(tree)

Код завершается ошибкой с сообщением об ошибке

AttributeError: 'ElementTree' object has no attribute 'tag'

При поиске я закончил ссылкузаявив, что я должен использовать getroot, чтобы я заменил мою последнюю строку на

xml_str = ET.tostring(tree.getroot())

, и теперь все в порядке, но я не уверен, почему изначально произошел сбой.

, потому что parse возвращаетобъект ElemenTree, в то время как tostring требуется объект элемента?

Спасибо за ваши драгоценные отзывы

Саймон

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Они не являются объектами одного и того же класса.tree является xml.etree.ElementTree.ElementTree объектом, а tree.getroot() является xml.etree.ElementTree.Element.А для ElementTree.toString требуется параметр Element (не ElementTree)

С другой стороны, tree имеет метод write:

out = io.BytesIO()
tree.write(out)
xml_str = out.getvalue().decode()
0 голосов
/ 18 мая 2018

ET.tostring требует одного элемента xml, тогда как вы передавали ему все дерево.

...