ElementTree iter escape?

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
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

Hallo,

ich soll zur Zeit relativ große XML-Dateien parsen (von 7MB bis 50MB). Dabei handelt sich hauptsächlich um User generated content. Jetzt habe ich allerdings das Problem, dass sich in diesen Datein anscheinend ungültige XML Zeichen befinden und cElementTree deshalb Fehlermeldungen aufwirft. Auf Stackoverflow hatte ein User schon einmal exakt das gleiche Problem: http://stackoverflow.com/questions/1304 ... lementtree. Ihm wurde dort empfohlen diese Zeichen zu escapen. Da ich meine Dateien allerdings mit iterparse parse und sie nicht vorher komplett in den Arbeitsspeicher laden will, weiß ich gerade nicht, wie ich das Problem lösen kann.
Kann mir da jemand weiter helfen?


LG
microkernel
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@microkernel: Welcher User generiert 50MB-XML-Dateien von Hand?
Rein zur Definition: Es gibt kein ungültiges XML, weil dann ist es kein XML. Derjenige, der die XML-Dateien erzeugt, muß also dafür sorgen, dass keine ungültigen Zeichen geschrieben werden. Ich finde auf meiner Tastatur übrigens keine solche Zeichen.
Auch bei iterparse wird die Datei irgendwann gelesen. Und zwischen Lesen der Datei und Verarbeiten der Daten kannst Du den escape-Schritt hängen.
BlackJack

@microkernel: `iterparse()` kann man jedes Objekt übergeben was eine entsprechende `read()`-Methode hat. Du kannst Dich also zwischen die Datei und den Parser hängen und die Daten nach dem lesen aber vor dem parsen verändern. Würde ich allerdings als hässlichen Hack bezeichnen. Tritt auf jeden Fall dem/den Erzeuger(n) dieser Daten mal auf die Füsse, das sie doch bitte XML erzeugen sollen.

@Sirius: Ist jetzt die Frage ob man die Taste über der Eingabetaste als Quelle für ein Backspace ('\x08') ansehen kann. :-)
Antworten