Seite 1 von 1
Outputformat von xml.etree.cElementTree ändern
Verfasst: Donnerstag 25. Juni 2009, 12:56
von Mawilo
Hallo,
gibt es eine Möglichkeit, das Output-Format von xml.etree.cElementTree zu ändern? Die einzelnen Elemente werden in der Kurzschreibweise geschrieben:
Code: Alles auswählen
<kopfdaten gueltig-ab="20090629" gueltig-bis="20090705">
Ich benötige aber die "alte" Schreibweise:
Code: Alles auswählen
<kopfdaten>
<gueltig-ab>"20090629"</gueltig-ab>
<gueltig-bis>"20090705"</gueltig-bis>
</kopfdaten>
Das Programm, das die Daten schlucken soll, kann leider nix anderes. Alternativ kann ich die Strings aneinander kleben, was aber sehr unschön wäre.
Grüße
Mawilo
Verfasst: Donnerstag 25. Juni 2009, 13:25
von cofi
Ersteres ist aber nicht die Kurschreibweise, sondern ein anderes Format, denn dort sind die Elemente der 2. Version _Attribute_ von `kopfdaten` und nicht Kindelemente.
D.h. du brauchst eine Funktion, die die Attribute ausliest und als Kindelemente anhängt, aber das ist _nicht_ eine Sache der Ausgabe, sondern eine andere Datenstruktur.
Verfasst: Donnerstag 25. Juni 2009, 14:25
von Mawilo
die Datenstruktur ist nicht das Problem:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from xml.etree import cElementTree as ET
open_file = open('test.xml', 'w')
root = ET.Element('root')
kopfdaten = ET.SubElement(root, 'kopfdaten')
gueltig_ab = ET.SubElement(kopfdaten, 'gueltig-ab')
gueltig_bis = ET.SubElement(kopfdaten, 'gueltig-bis')
ET.ElementTree(root).write(open_file)
open_file.close()
print 'fertig'
Ausgabe:
Code: Alles auswählen
<root>
<kopfdaten>
<gueltig-ab/>
<gueltig-bis/>
</kopfdaten>
</root>
Nur wie bekomme ich jetzt die Daten da rein? Wenn ich das attrib-dic nutze, habe ich wieder das gleiche Problem.
Verfasst: Donnerstag 25. Juni 2009, 14:43
von /me
Mawilo hat geschrieben:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from xml.etree import cElementTree as ET
open_file = open('test.xml', 'w')
root = ET.Element('root')
kopfdaten = ET.SubElement(root, 'kopfdaten')
gueltig_ab = ET.SubElement(kopfdaten, 'gueltig-ab')
gueltig_bis = ET.SubElement(kopfdaten, 'gueltig-bis')
ET.ElementTree(root).write(open_file)
open_file.close()
print 'fertig'
Nur wie bekomme ich jetzt die Daten da rein?
Weise dem gewünschten Element den passenden Text zu.
Gruß,
Matthias
Verfasst: Dienstag 14. Juli 2009, 12:29
von Oddler
Hi,
ich habe ein ähnliches Problem.
Bei mir wird selbst wenn ich den Code ausführe alles in eine Zeile geschrieben. Was läuft da schief?
Grüße
Odde
Verfasst: Dienstag 14. Juli 2009, 12:46
von lunar
Gar nichts. XML wird durch die Tags strukturiert und ist unabhängig von Zeilenumbrüchen. Daher ist es bei der Serialisierung schneller, wenn alles in eine Zeile geschrieben wird. Um eine "hübsche" Formatierung zu erzwingen, muss man ".write()" iirc "pretty_print=True" mitgeben.