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
ElementTree iter escape?
- microkernel
- User
- Beiträge: 271
- Registriert: Mittwoch 10. Juni 2009, 17:27
- Wohnort: Frankfurt
- Kontaktdaten:
@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.
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.
@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.
@Sirius: Ist jetzt die Frage ob man die Taste über der Eingabetaste als Quelle für ein Backspace ('\x08') ansehen kann.