Outputformat von xml.etree.cElementTree ändern

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
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

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
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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.
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

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.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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

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

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.
Antworten