2 Stimmen

Wie kann ein Element als korrektes XML mit XML-Tag gedruckt werden?

Ich habe also diese Funktion in meiner Ansicht:

from django.http import HttpResponse
from xml.etree.ElementTree import Element, SubElement, Comment, tostring

def helloworld(request):
    root_element = Element("root_element")
    comment = Comment("Hallo Welt!!!")
    root_element.append(comment)
    foo_element = Element("foo")
    foo_element.text = "bar"
    bar_element = Element("bar")
    bar_element.text = "foo"
    root_element.append(foo_element)
    root_element.append(bar_element)
    return HttpResponse(tostring(root_element), "application/xml")

Was es tut, ist, etwas wie dies zu drucken:

barfoo

Wie Sie sehen können, fehlt der XML-Tag am Anfang. Wie kann man eine ordnungsgemäße XML-Ausgabe mit XML-Deklaration erstellen?

4voto

Alexis Huet Punkte 735

Wenn Sie eine Abhängigkeit in Ihrem Projekt hinzufügen können, empfehle ich Ihnen, lxml zu verwenden, das vollständiger und optimierter als das grundlegende XML-Modul ist, das mit Python geliefert wird.

Um dies zu tun, müssen Sie nur Ihre Importanweisung wie folgt ändern:

from lxml.etree import Element, SubElement, Comment, tostring

Und dann haben Sie eine tostring()-Funktion mit einer 'xml_declaration'-Option:

>>> tostring(root, xml_declaration=False)
'barfoo'
>>> tostring(root, xml_declaration=True)
"\nbarfoo"

In der Standardbibliothek hat nur die write()-Methode von ElementTree eine xml_declaration-Option. Eine andere Lösung wäre die Erstellung eines Wrappers, der ElementTree.write() verwendet, um in ein StringIO zu schreiben und anschließend den Inhalt des StringIO zurückzugeben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X