Seite 1 von 1

Wie schreibe ich eine XML-Datei mit lxml?

Verfasst: Freitag 18. September 2009, 10:26
von Gab
Hallo, allerseits,

ich versuche gerade, eine XML-Datei zu schreiben, Code derzeit so:

Code: Alles auswählen

import lxml.etree as lxml

dateiname = "D:\test.xml"
root = lxml.Element ("Test" )
content = lxml.SubElement (root,"content")
title = lxml.SubElement (content, "title")
xmlfile = open (dateiname, 'w')
xmlfile.write(lxml.tostring(root, encoding='utf-8',pretty_print=True))
xmlfile.close()
Derzeitige Fehlermeldung
TypeError: can't write bytes to text stream
Wo liegt der Fehler?

Danke
Gab

Verfasst: Freitag 18. September 2009, 10:37
von lutz.horn
Unter GNU/Linix kann ich das Problem nicht repdoduzieren.

Code: Alles auswählen

% cat test.xml
<Test>
  <content>
    <title/>
  </content>
</Test>

Verfasst: Freitag 18. September 2009, 10:39
von Gab
Arbeite leider auf ein WIN-System

Verfasst: Freitag 18. September 2009, 10:43
von Hyperion
Ich vermute mal der OP nutzt ein Python 3.x? Dieses "byte" und "text-Stream" klingt irgend wie danach...

Das default bei open() in Py3 ist laut Doku "t" for text mode. Wenn ich das richtig verstanden habe, muss man demnach einen string übergeben (was in Python 2.x ja einem Unicode-Object entpsricht, oder?). Der OP übergibt aber ja Bytes (er encodiert ja explizit).

Also müßte man die Datei wie folgt öffnen:

Code: Alles auswählen

with open(filename, "wb") as out_file:
    pass
Oder aber man stellt das encoding erst beim open() ein und versucht von lxml nur einen String zu holen.

Verfasst: Freitag 18. September 2009, 10:52
von Gab
Das war's. Danke!

Verfasst: Freitag 18. September 2009, 10:56
von Leonidas
Schon mal geschaut dass ``"D:\test.xml"`` mittendrin ein Tab enthält?