Wie schreibe ich eine XML-Datei mit lxml?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Gab
User
Beiträge: 21
Registriert: Montag 17. August 2009, 14:45

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
Benutzeravatar
lutz.horn
User
Beiträge: 205
Registriert: Dienstag 8. November 2005, 12:57
Wohnort: Pforzheim

Unter GNU/Linix kann ich das Problem nicht repdoduzieren.

Code: Alles auswählen

% cat test.xml
<Test>
  <content>
    <title/>
  </content>
</Test>
Gab
User
Beiträge: 21
Registriert: Montag 17. August 2009, 14:45

Arbeite leider auf ein WIN-System
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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.
Gab
User
Beiträge: 21
Registriert: Montag 17. August 2009, 14:45

Das war's. Danke!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Schon mal geschaut dass ``"D:\test.xml"`` mittendrin ein Tab enthält?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten