Как написать объявление XML с помощью xml.etree.ElementTree

Я создаю XML-документ в python, но строковые функции не печатают объявление XML.

Мой код:

from xml.etree.ElementTree import Element, tostring document = Element('outer') node = SubElement(document, 'inner') node.NewValue = 1 print tostring(document) 

Выходы: <outer><inner /></outer>

Мне нужно это, чтобы показать объявление XML <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> Но, похоже, для этого не существует документации.

Есть ли подходящий метод для представления объявления XML?

  • Python strip XML-теги из документа
  • Lazy SAX XML-анализатор с остановкой / возобновлением
  • Анализ разбитого XML с помощью lxml.etree.iterparse
  • Выясните, где CDATA находится в элементе lxml?
  • Скрипт для преобразования символов Unicode в формате <U9999> в их эквиваленты ASCII
  • Обработка XML в Python
  • Как эффективно хранить этот проанализированный XML-документ в базе данных MySQL с помощью Python?
  • Node.toprettyxml () добавляет новые строки в DOCTYPE в Python
  • 6 Solutions collect form web for “Как написать объявление XML с помощью xml.etree.ElementTree”

    Я с удивлением обнаружил, что с ElementTree.tostring() не существует способа. Однако вы можете использовать ElementTree.ElementTree.write() для записи вашего XML-документа в поддельный файл:

     from io import BytesIO from xml.etree import ElementTree as ET document = ET.Element('outer') node = ET.SubElement(document, 'inner') et = ET.ElementTree(document) f = BytesIO() et.write(f, encoding='utf-8', xml_declaration=True) print(f.getvalue()) # your XML file, encoded as UTF-8 

    См. Этот вопрос . Даже тогда я не думаю, что вы можете получить свой «автономный» атрибут, не нажимая заранее.

    Я бы использовал lxml (см. http://lxml.de/api.html).

    Тогда ты можешь:

     from lxml import etree document = etree.Element('outer') node = etree.SubElement(document, 'inner') print(etree.tostring(document, xml_declaration=True)) 

    Я столкнулся с этой проблемой недавно, после некоторого копания кода, я нашел следующий фрагмент кода – это определение функции ElementTree.write

     def write(self, file, encoding="us-ascii"): assert self._root is not None if not hasattr(file, "write"): file = open(file, "wb") if not encoding: encoding = "us-ascii" elif encoding != "utf-8" and encoding != "us-ascii": file.write("<?xml version='1.0' encoding='%s'?>\n" % encoding) self._write(file, self._root, encoding, {}) 

    Итак, ответ: если вам нужно написать заголовок XML в свой файл, укажите аргумент encoding отличный от utf-8 или us-ascii , например UTF-8

    Я бы использовал ET :

     try: from lxml import etree print("running with lxml.etree") except ImportError: try: # Python 2.5 import xml.etree.cElementTree as etree print("running with cElementTree on Python 2.5+") except ImportError: try: # Python 2.5 import xml.etree.ElementTree as etree print("running with ElementTree on Python 2.5+") except ImportError: try: # normal cElementTree install import cElementTree as etree print("running with cElementTree") except ImportError: try: # normal ElementTree install import elementtree.ElementTree as etree print("running with ElementTree") except ImportError: print("Failed to import ElementTree from any known place") document = etree.Element('outer') node = etree.SubElement(document, 'inner') print(etree.tostring(document, encoding='UTF-8', xml_declaration=True)) 

    Это работает, если вы просто хотите распечатать. Получение ошибки при попытке отправить ее в файл …

     import xml.dom.minidom as minidom import xml.etree.ElementTree as ET from xml.etree.ElementTree import Element, SubElement, Comment, tostring def prettify(elem): rough_string = ET.tostring(elem, 'utf-8') reparsed = minidom.parseString(rough_string) return reparsed.toprettyxml(indent=" ") 

    Если вы включите encoding='utf8' , вы получите заголовок XML :

    xml.etree.ElementTree.tostring записывает объявление кодировки XML с кодировкой = 'utf8'

    Пример кода Python 2:

     import xml.etree.ElementTree as ElementTree tree = ElementTree.ElementTree( ElementTree.fromstring('<xml><test>123</test></xml>') ) root = tree.getroot() print 'without:' print ElementTree.tostring(root, method='xml') print print 'with:' print ElementTree.tostring(root, encoding='utf8', method='xml') 

    Вывод:

     without: <xml><test>123</test></xml> with: <?xml version='1.0' encoding='utf8'?> <xml><test>123</test></xml> 
    Interesting Posts

    Переопределение декоратора во время модульного теста на питоне

    Каков наилучший способ инициализации диктофона в Python?

    Использование HTTP PROXY – Python

    Как преобразовать numpy.matrix или массив в scipy разреженную матрицу

    Каков наиболее распространенный способ настройки статических файлов при отладке и выпуске Django

    Удаление tmp-файла после возврата HttpResponse в django

    Построение двух распределений в seaborn.jointplot

    Как изменить выбросы на некоторые другие цвета на участке рассеяния

    Стандарты / лучшие практики кодирования Python

    Версия TensorFlow версии 1.0.0-rc2 для Windows: «OpKernel (« op: «BestSplits» device_type: «CPU») для неизвестного оп: BestSplits »с тестовым кодом

    Flask-Assets работают локально, но не на Heroku

    Отображение gtk.Calendar в меню?

    Остановка итерации без использования `break` в Python 3

    Как перебирать столбцы матрицы?

    Разработка и использование одного и того же Python на одном компьютере

    Python - лучший язык программирования в мире.