2009-03-25 8 views

Répondre

11

Le code sur la page web que vous avez lié à des utilisations doc.toprettyxml pour créer une chaîne à partir du XML DOM, de sorte que vous pouvez simplement écrire cette chaîne dans un fichier:

f = open("output.xml", "w") 
try: 
    f.write(doc.toprettyxml(indent=" ")) 
finally: 
    f.close() 

En Python 2.6 (ou 2.7 Je suppose que , chaque fois qu'il sort), vous pouvez utiliser l'instruction "with":

with open("output.xml", "w") as f: 
    f.write(doc.toprettyxml(indent=" ")) 

Cela fonctionne également en Python 2.5 si vous mettez

from __future__ import with_statement 

au début du fichier.

+0

+1 pour le modifier pour ajouter' with'. –

1
f = open('yourfile.xml', 'w') 
xml.dom.ext.PrettyPrint(doc, f) 
f.close() 
+0

Merci. Cette méthode ouverte crée un nouveau fichier? –

+0

C'est une fonction, et il va créer un nouveau fichier si le fichier n'existe pas déjà et que 'w', 'wb', etc. lui sont passés. Lisez les documents à ce sujet. –

+0

Dois-je d'abord importer xml.dom? –

9

coonj est une sorte de droit, mais xml.dom.ext.PrettyPrint fait partie du paquet d'extension PyXML de plus en plus négligé. Si vous voulez rester dans le fourni, comme standard minidom, vous diriez:

f= open('yourfile.xml', 'wb') 
doc.writexml(f, encoding= 'utf-8') 
f.close() 

(ou en utilisant le « avec » déclaration comme mentionné par David pour le rendre un peu plus court Utilisez le mode « wb » à. éviter que les lignes de fin de fichier CRLF indésirables sur Windows n'interfèrent avec des encodages comme UTF 16. Puisque XML a ses propres mécanismes de gestion de l'interprétation de ligne, il doit être traité comme un fichier binaire plutôt que textuel.)

Si vous n'incluez pas les '' encoding 'argument (soit en writexml soit en toprettyxml), il va essayer d'écrire une chaîne Unicode directement dans le fichier, donc s'il y a des caractères non-ASCII, vous obtiendrez un UnicodeEncodeError. N'essayez pas de .encode() les résultats de toprettyxml vous-même; pour les codages non-UTF-8, cela peut générer du XML non-formé.

Il n'y a pas «writeprettyxml() fonction, mais il est trivialement simple de le faire vous-même:

with open('output.xml', 'wb') as f: 
    doc.writexml(f, encoding= 'utf-8', indent= ' ', newl= '\n') 
Questions connexes