Sfondo
Sto utilizzando SQLite per accedere a un database e recuperare le informazioni desiderate. Sto usando ElementTree in Python versione 2.6 per creare un file XML con queste informazioni.Come faccio a ottenere in Python ElementTree una bella stampa su un file XML?
Codice
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")
tentativi
Ho provato con tree.write("New_Database.xml", "utf-8")
al posto del l'ultima riga di codice di cui sopra, ma non ha di modifica del layout del XML a tutti - è ancora un pasticcio confuso.
ho anche deciso di smanettare e provato a fare:
tree = minidom.parseString(ET.tostring(root)).toprettyxml(indent = " ")
invece di stampare questo alla shell Python, che dà l'errore di AttributeError : oggetto 'unicode' non ha alcun attributo 'scrittura'.
Domande
Quando scrivo il mio albero in un file XML sull'ultima riga, c'è un modo per stampare abbastanza al file XML, come fa per la shell Python?
Posso usare toprettyxml()
qui o c'è un altro modo per farlo?
Questa risposta sarebbe più chiara se si includesse l'istruzione 'import xml.dom.minidom as minidom' che sembra essere richiesta. –
@KenPronovici Forse. Quella importazione appare nella domanda originale, ma l'ho aggiunta qui, quindi non c'è confusione. –
Questa risposta viene ripetuta così spesso su qualsiasi tipo di domanda, ma è tutt'altro che una buona risposta: è necessario convertire completamente l'intero albero XML in una stringa, eseguirne di nuovo, per ottenerne nuovamente la stampa, questa volta in modo diverso. Questo non è un buon approccio. Utilizzare invece lxml e serializzare direttamente utilizzando il metodo incorporato fornito da lxml, in questo modo eliminando qualsiasi tipo di stampa immediata seguita da reparsing. –