XML-File mit ElementTree & IronPython geht nicht

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
sebastian06
User
Beiträge: 19
Registriert: Mittwoch 16. Dezember 2009, 11:05

Servus,

ich habe eine Problem mit XML und ElementTree. Normalerweise benutze ich PythonXY und Spyder als Umgebung. Dort funktioniert mein Script ohne Probleme.

Code: Alles auswählen

import xml.etree.cElementTree as ET

tree = ET.ElementTree(file=''Tile-Test_4x3_Meander_Mouse.czexp')
Wenn ich allerdings das gleiche in IronPython in Eclipse versuche, dann bekomme ich eine Fehlermeldung.

Code: Alles auswählen

import xml.etree.ElementTree as ET

tree = ET.ElementTree(file=''Tile-Test_4x3_Meander_Mouse.czexp')
Wenn ich das File direkt in Eclipse öffne, sehen die beiden ersten zeilen so aus:

Code: Alles auswählen

<?xml version="1.0" encoding="utf-8"?>
<HardwareExperiment Version="1.1">
...
Da läuft also irgendendwas mit dem Encoding schief. Allerdings geöffnet in Notepad++ sieht es so aus

Code: Alles auswählen

<?xml version="1.0" encoding="utf-8"?>
<HardwareExperiment Version="1.1">
...
Wenn ich das File in Notepad++ mit UTF-8 ohne BOM abspeichere und dann in Eclipse öffne, dann passt alles.
Wie bekomme ich es hin, das ich auch in IronPython das File korrekt einlesen kann? Oder sollte ich auf DOM Schnittstelle wechseln?

Grüße,

Sebastian


Das File ist in beiden Fällen das gleiche. Es ist ein XML File, dass nur eine andere Dateiendung hat. Der Fehler in Eclipse ist folgender:

Traceback (most recent call last):

File "C:\Program Files (x86)\IronPython 2.7\Lib\xml\etree\SimpleXMLTreeBuilder.py", line 84, in feed
File "C:\Program Files (x86)\IronPython 2.7\Lib\xmllib.py", line 167, in feed
File "C:\Program Files (x86)\IronPython 2.7\Lib\xmllib.py", line 258, in goahead
File "C:\Users\M1SRH\Documents\Eclipse_Workspace\Edit_czexp_XML\src\xml_test\ZenParse_Tile.py", line 7, in <module>
File "C:\Program Files (x86)\IronPython 2.7\Lib\xml\etree\ElementTree.py", line 611, in __init__
File "C:\Program Files (x86)\IronPython 2.7\Lib\xml\etree\ElementTree.py", line 653, in parse
File "C:\Program Files (x86)\IronPython 2.7\Lib\xmllib.py", line 790, in syntax_error

xmllib.Error: Syntax error at line 1: illegal data at start of file
lunar

@sebastian06 Entferne grundsätzlich erst mal die BOM von Deinen XML-Dateien. Bei UTF-8 ist diese Markierung vollkommen überflüssig, und wird oftmals nicht unterstützt (u.a. nicht von den Stream-Klassen der Java-Standardbibliothek).

Dann wende Dich an die IronPython-Entwickler, und melde Ihnen dieses Problem. Ein standardkonformer XML-Parser ist afaik verpflichtet, die BOM am Anfang UTF-8 kodierter XML-Daten zu ignorieren.

Um das Problem unmittelbar zu lösen, lese die Datei manuell ein, behandele die BOM entsprechend, und reiche die Bytes ohne BOM an ElementTree weiter.
Antworten