Seite 1 von 1

XML - File ausgelesen oder nicht ?

Verfasst: Dienstag 17. Juni 2008, 16:02
von Pü-Ton
Hi @ all,

gibt es eine Möglichleit elegant festzustellen ob ein XML - File erfolgreich geparst wurde?
Ich könnte mir vorstellen, dass man das unschön über eine Variable innerhalb des XMLs machen könnte, das will ich aber nicht.

Es geht also darum eine if - Abfrage zu schreiben, die abfrat, ob das File erfolgreich geparst wurde, und wenn nicht, gibt sie eine Fehlermeldung raus...

Danke für alle Hinweise... :D

Verfasst: Dienstag 17. Juni 2008, 16:25
von EyDu
Ich bestell mir demächst doch noch eine Glaskugel bei Ebay... ;-)

Etwas mehr Information muss schon sein. Womit parst du denn die XML-Datei. Vielleicht hilft auch ein wenig Quellcode, wenn die Frage in irgend einem Kontext zu einem Programm steht.

Verfasst: Dienstag 17. Juni 2008, 16:30
von shakebox
und ne Definition, was "erfolgreich" in dem Fall genau ist, waere vermutlich auch nicht schlecht :)

Verfasst: Dienstag 17. Juni 2008, 16:45
von n4p
also ich habs jetzt mal so verstanden, dass er abfragen will ob es valides xml ist oder ob formale fehler drin sind.. oder?

Verfasst: Dienstag 17. Juni 2008, 16:54
von Leonidas
Bei nicht-wohlgeformten XML wirft der XML-Parser Exceptions, so einfach ist das.

Verfasst: Dienstag 17. Juni 2008, 16:57
von Hyperion
Bei rein syntaktischer Analyse müsste doch eigentlich jeder Parser meckern, oder?

Bei semantischen Sachen braucht es schon einen Parser, der DTDs oder besser XML-Schema beherrscht.

Das sollte in der Doku eines Parsers zu finden sein.

Aber "erfolgreich" könnte auch alles mögliche andere bedeuten, etwa ob alle aus dem XML-File gewünschten Daten gefunden wurden usw. Also ohne weitere Angaben kann man da wohl nicht viel sagen, sondern nur vermuten ;-)

@EyDu: Gibts die denn bei eBay? :D

Verfasst: Mittwoch 18. Juni 2008, 08:18
von Pü-Ton
Moin,

also ich verwende DOM bzw minidom.

Es ist so, dass mein Programm warten soll, bis/ob/dass ein XML-File ausgelesen wurde, weil da wichtige Infos für den Rest des Aufbaus einer Gui drin sind. Dieses XML wird durch den Benutzer eingegeben (also der Pfad) und wenn kein gültiges XML oder gar nichts eingegeben wurde, soll eine Fehlermeldung kommen.
Und da kommt meine Frage her:

Wie kann ich über eine if-Anweisung elegant abfragen, ob dieses XML auch tatsächlich/erfolgreich/wirklich/komplett ausgelesen wurde.

So etwas wie ein :!: HasRunThrough(xml) :!: mit einem :!: true oder false :!: als Rückgabewert.

Verfasst: Mittwoch 18. Juni 2008, 08:29
von Pü-Ton
...in VBscribt würde das so aussehen:

Code: Alles auswählen

If xmlDoc.load(parent.frames("blabla").document.in.infile.value) = false then

...

Verfasst: Mittwoch 18. Juni 2008, 09:18
von n4p
Wie schon von einigen hier gesagt, wenn es nicht geparsed werden kann wirft dir der Parser eine Exception vor die Füße. Damit solltest du ja dann was anfangen können.

Code: Alles auswählen

from xml.dom.minidom import parse
try:
    dom1 = parse('datei.xml')
    print 'datei wurde erfolgreich geparsed'
except:
    print 'Datei konnte nicht geparsed werden'

Verfasst: Mittwoch 18. Juni 2008, 09:24
von Pü-Ton
ja schon,
aber irgendwann soll das Programm ja von einem Anwender benutzt werden und der kann mit einer Py-Exception nicht viel anfangen.
Der soll eine Fehlermeldung auf den Bildschirm bekommen !!!

Verfasst: Mittwoch 18. Juni 2008, 09:24
von Hyperion
Pü-Ton hat geschrieben: oder gar nichts eingegeben wurde, soll eine Fehlermeldung kommen.
Naja, das musst Du schon per GUI-Funktionalität checken. Also den Rest erst freigeben, wenn eine Datei angegeben wurde und diese dann korrekt war. Letzteres wurde ja nun schon mehrfach beschrieben, ersteres sollte hoffentlich klar sein :-)

Verfasst: Mittwoch 18. Juni 2008, 09:25
von Hyperion
Pü-Ton hat geschrieben:ja schon,
aber irgendwann soll das Programm ja von einem Anwender benutzt werden und der kann mit einer Py-Exception nicht viel anfangen.
Der soll eine Fehlermeldung auf den Bildschirm bekommen !!!
Ja und? Dann schreib eben hin: "Sorry Alter, aber dein XML-File war fehlerhaft ... und für den Kenner hier die Meldung:" und dann die Message der Exception ;-)

Verfasst: Mittwoch 18. Juni 2008, 09:39
von Pü-Ton
ok, danke für die Hinweise.

Ich habs jetzt so gemacht:

Code: Alles auswählen


    try:
        xmlDoc = parse(eingabe.get())
    except expat.ExpatError, e:
        raise XmlParserError("Your Document failed to load due the following error.\n"
            "Error #: %s: %s Line #: %s;\n"
            "Document URL: %s;"
            ) % (xmlDoc.errorCode, xmlDoc.reason, xmlDoc.Line, xmlDoc.url)