Фон
Я использую SQLite для доступа к базе данных и получения требуемой информации. Я использую ElementTree в Python версии 2.6 для создания XML-файла с этой информацией.Как получить ElementTree Python для печати в XML-файле?
Код
import sqlite3
import xml.etree.ElementTree as ET
# NOTE: Omitted code where I acccess the database,
# pull data, and add elements to the tree
tree = ET.ElementTree(root)
# Pretty printing to Python shell for testing purposes
from xml.dom import minidom
print minidom.parseString(ET.tostring(root)).toprettyxml(indent = " ")
####### Here lies my problem #######
tree.write("New_Database.xml")
Попытки
Я попытался с помощью tree.write("New_Database.xml", "utf-8")
вместо последней строки кода выше, но не редактировать раскладку языка XML вообще - это все перемешаны беспорядок.
Я также решил поиграться вокруг и пытался делать:
tree = minidom.parseString(ET.tostring(root)).toprettyxml(indent = " ")
вместо печати это оболочки Python, что дает ошибку AttributeError: «юникода» объект не имеет атрибута «писать».
Вопросы
Когда я пишу мое дерево в файл XML на последней строке, есть способ довольно печать в файл XML, как это делает в оболочку Python?
Могу ли я использовать toprettyxml()
здесь или есть другой способ сделать это?
Этот ответ был бы более ясным, если бы вы включили инструкцию 'import xml.dom.minidom as minidom', которая представляется необходимой. –
@KenPronovici Возможно. Это импорт появляется в исходном вопросе, но я добавил его здесь, поэтому нет путаницы. –
Этот ответ повторяется так часто по любым вопросам, но это не что иное, как хороший ответ: вам нужно полностью преобразовать все дерево XML в строку, переписать его, чтобы снова распечатать, на этот раз совсем иначе. Это не очень хороший подход. Используйте lxml вместо этого и сериализуйте напрямую, используя встроенный метод, предоставляемый lxml, таким образом устраняя любую промежуточную печать, за которой следует повторная обработка. –