XML einlesen und speichern

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
lepper
User
Beiträge: 1
Registriert: Mittwoch 30. November 2011, 22:34

Hallo zusammen,

ich tue via minidom eine XML Datei einlesen, bearbeiten und speichern. Ich habe da Problem mit der Kodierung (siehe xml):
erstens: nach einlesen geht encoding="ASCII" <?xml version="1.0" encoding="ASCII"?> verloren
zweitens: &#252; wird mit ü ersetzt, was eigentlich nicht gewollt ist. Ich will nach abspeichern immer noch &#252; stehen haben.

Wie geagt, ich will das Original beibehalten, wie geht es?

Grüße

Code: Alles auswählen

baum = dom.parse('test.xml')
print baum.toxml()

Code: Alles auswählen

<?xml version="1.0" encoding="ASCII"?> 
<dictionary> 
    <eintrag> 
        <schluessel typ="str">Hallo</schluessel> 
        <wert typ="int">0</wert> 
    </eintrag>
	<eintrag> 
        <schluessel typ="str">Hallo1</schluessel> 
        <wert typ="int">1</wert> 
		<level1>
			<level2>
				<level id="37">test</level>
				<level id="23">test1</level>
				<level id="13">test&#252;</level>				
			</level2>
		</level1>
    </eintrag> 
</dictionary>
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Benutze doch die Elementree-API. Dort kannst Du bei der `tostring`-Methode ein Encoding angeben.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Und außerdem: wozu Entities? 1975 hat angerufen, sie wollen ihr ASCII zurück. Es ist 2011, da kann man IMHO durchaus erwarten, dass alles UTF-8 ist. Außer man ist in Japan.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Leonidas hat geschrieben:Und außerdem: wozu Entities? 1975 hat angerufen, sie wollen ihr ASCII zurück. Es ist 2011, da kann man IMHO durchaus erwarten, dass alles UTF-8 ist. Außer man ist in Japan.
Naja, vielleicht gibt es ein anderes Programm, welches das XML verarbeitet und mit utf-8 nix anfangen kann - wobei... nuja, da wäre dann sicherlich dort der Wurm drin :mrgreen:

Wieso eigentlich Japan als Beispiel? Gibt es da etwas, das man wissen sollte bezüglich utf-8?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hyperion hat geschrieben:
Leonidas hat geschrieben:Und außerdem: wozu Entities? 1975 hat angerufen, sie wollen ihr ASCII zurück. Es ist 2011, da kann man IMHO durchaus erwarten, dass alles UTF-8 ist. Außer man ist in Japan.
Naja, vielleicht gibt es ein anderes Programm, welches das XML verarbeitet und mit utf-8 nix anfangen kann - wobei... nuja, da wäre dann sicherlich dort der Wurm drin :mrgreen:
Ich meine mich zu erinnern, dass die XML-Spec *vorschreibt*, dass jeder Parser mindestens UTF-8 versteht. Würde auch Sinn machen, da wenn man die Encoding-Angabe weglässt, sinnigerweise UTF-8 angenommen wird.
Hyperion hat geschrieben:Wieso eigentlich Japan als Beispiel? Gibt es da etwas, das man wissen sollte bezüglich utf-8?
Na, in Japan glaubt man nicht an UTF-8. Da ist dann jede Datei die ich aufmache dann Zeichensalat, bis ich mit iconv das EUC-JP zu UTF-8 umkodiere. Und wenn dann explodiert, dann war die Datei logischerweise in Shift-JIS und man muss natürlich das dann in UTF-8 konvertieren. Kann gar nicht sagen wie sehr ich das Leid bin.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Leonidas hat geschrieben: Ich meine mich zu erinnern, dass die XML-Spec *vorschreibt*, dass jeder Parser mindestens UTF-8 versteht. Würde auch Sinn machen, da wenn man die Encoding-Angabe weglässt, sinnigerweise UTF-8 angenommen wird.
Meine ich auch - ich spielte auch eher auf "Tools" an, die einen selbst geklöppelten Parser verwenden oder anders mit dem Encoding rumsauen. Hatten da ja erst neulich diesen einen Fall hier im Forum (Ok, da ging es "nur" um das Erstellen).

@Japan:
Oha... klingt ja übel! Ich nehme an, das hat historische Gründe? Wobei man sich ja auch hierzulande Frage, ob manche schon mal etwas über andere Encodings als ASCII gehört haben - speziell bei LaTeX und Dozenten rennt man da gegen Mauern...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hyperion hat geschrieben:Meine ich auch - ich spielte auch eher auf "Tools" an, die einen selbst geklöppelten Parser verwenden oder anders mit dem Encoding rumsauen. Hatten da ja erst neulich diesen einen Fall hier im Forum (Ok, da ging es "nur" um das Erstellen).
Na, aber schlechte Tools zu rechtfertigen und dann schlechte Lösungen zu bauen ist echt nicht so meine Sache.
Hyperion hat geschrieben:Oha... klingt ja übel! Ich nehme an, das hat historische Gründe? Wobei man sich ja auch hierzulande Frage, ob manche schon mal etwas über andere Encodings als ASCII gehört haben - speziell bei LaTeX und Dozenten rennt man da gegen Mauern...
Naja, ich nehme an dass es Teils an der Han-Unifikation von Unicode, die die Japaner dem Unicode-Consortium "ubelnehmen, und teils dran dass die Codepoints dann alles l"angere Multibyte-Sequenzen sind, und man da so viel Speicher verschwendet. Also haupts"achlich also social inertia.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
problembär

Manchmal kann es besser und schneller sein, das als einfache Nur-Text-Datei einzulesen und zu bearbeiten.
Sind das sehr viele Daten, die Du nach xml-Kriterien durchsuchen mußt, so daß Du wirklich ein xml-Modul brauchst oder würde es nicht auch ohne gehen?
Dann hättest Du jedenfalls nicht die Probleme, die Du beschreibst.
deets

@problembaer

Und wieder ein Tipp aus der Kategorie "simpel und falsch". Die Menge falsch prozessierter und generierter XML-Dokumente ist ueberwaeltigend - genau weil man ihnen mit deinen simplen "Hausmittelchen" zu Leibe rueckt.

XML-Dokumente liest man mit einem Parser, und schreibt sie mit einem Generator. Und dann sind alle gluecklich. Aerger mit zB Entity-Referenzen, wie beim OP, gibt's nur bei denen, die das nicht machen. Das war 1998 noch vertretbar. Im Jahre 11 nach der Jahrtausendwende eher nicht.
Antworten