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.
Mawilo
User
Beiträge: 452 Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:
Donnerstag 25. Juni 2009, 12:56
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
cofi
Python-Forum Veteran
Beiträge: 4432 Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0
Donnerstag 25. Juni 2009, 13:25
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.
Mawilo
User
Beiträge: 452 Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:
Donnerstag 25. Juni 2009, 14:25
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.
/me
User
Beiträge: 3555 Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn
Donnerstag 25. Juni 2009, 14:43
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
Oddler
User
Beiträge: 1 Registriert: Dienstag 14. Juli 2009, 12:14
Dienstag 14. Juli 2009, 12:29
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
lunar
Dienstag 14. Juli 2009, 12:46
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.