Как сохранить XML-файл на диск? - PullRequest
2 голосов
/ 26 марта 2009

Я сделал что-то похожее на this , но не смог найти способ записать результат в XML-файл.

Ответы [ 3 ]

11 голосов
/ 26 марта 2009

Код на веб-странице, на которую вы ссылаетесь, использует 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

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

9 голосов
/ 26 марта 2009

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

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

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

Если вы не включите аргумент 'encoding' (в 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')
1 голос
/ 26 марта 2009
f = open('yourfile.xml', 'w')
xml.dom.ext.PrettyPrint(doc, f)
f.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...