2009-03-25 3 views

ответ

11

код на веб-странице вы связаны с использований doc.toprettyxml для создания строки из XML DOM, так что вы можете просто написать эту строку в файл:

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

В Python 2.6 (или 2.7, я полагаю всякий раз, когда он выходит), вы можете использовать "with" заявление:

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

Это также работает в Python 2.5, если вы поставите

from __future__ import with_statement 

в начале файла.

+0

+1 для редактирования, чтобы добавить 'with'. –

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

Спасибо. Этот открытый метод создает новый файл? –

+0

Это функция, и она создаст новый файл, если файл еще не существует, и ему передаются 'w', 'wb' и т. Д. Прочтите документы на нем. –

+0

Также мне нужно сначала импортировать xml.dom? –

9

coonj это вид справа, но xml.dom.ext.PrettyPrint является частью более запущенного пакета расширения PyXML. Если Вы хотите остановиться в поставляемом-качестве стандарта minidom, вы бы сказали:

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

(или с помощью «с» утверждением как было упомянуто Давида, чтобы сделать его немного короче режим «Wb» Используется для. избегайте нежелательных строк CRLF в Windows, мешающих кодированию, например UTF-16. Поскольку у XML есть свои собственные механизмы обработки интерпретации новой строки, его следует рассматривать как двоичный файл, а не текст.)

Если вы не включили ' (для writexml или toprettyxml), он попытается написать строку Unicode непосредственно в файл, поэтому, если в ней есть какие-либо символы, отличные от ASCII, вы получите UnicodeEncodeError. Не пытайтесь выполнить .encode() результаты toprettyxml самостоятельно; для кодировок, отличных от UTF-8, это может генерировать неверно сформированный XML.

Там нет 'writeprettyxml() функция, но это тривиально просто сделать это самостоятельно:

with open('output.xml', 'wb') as f: 
    doc.writexml(f, encoding= 'utf-8', indent= ' ', newl= '\n') 
Смежные вопросы