Seite 1 von 1

Dateiformat prüfen

Verfasst: 25. Februar 2009 16:34
von nkc
Hallo,

ich möchte mehrere .xml-Dateien in einem QListWidget laden.
Wie kann ich überüfen, ob es sich um eine .xml-Datei handelt oder nicht,
denn es dürfen keine andere Dateien geladen werden können.

Hat jemand eine Idee, wie ich so eine Abfrage implementieren kann?
Danke

Verfasst: 25. Februar 2009 17:17
von RavenIV
Bei Qt ist doch auch eine XML-Klasse dabei.
Die hat bestimmt eine Validierungs-Möglichkeit...

Verfasst: 25. Februar 2009 19:51
von STS301
du könntest es mit einem QOpenDialog machen und dem sagen, dass er nur die .xml Datein öffnen lässt

Verfasst: 26. Februar 2009 07:17
von macman
STS301 hat geschrieben:du könntest es mit einem QOpenDialog machen und dem sagen, dass er nur die .xml Datein öffnen lässt
Na das taugt ja nun gar nicht. Ich benenne meine Datei um und habe ein XML, oder wie? :)
Valides XML enthält immer eine Dokumenttypdefinition in der ersten Zeile. Einlesen und prüfen der ersten Zeichen einer Datei sollte also reichen, um festzustellen ob es sich aller Wahrscheinlichkeit um ein XML handelt.

Ansonsten würde ich es auch QtXml überlassen.

Verfasst: 27. Februar 2009 10:50
von nkc
Hallo,
ich habe es folgendermaßen versucht.

Code: Alles auswählen

     QDomDocument domDoc;
     QDomElement root = domDoc.documentElement();
     if (root.tagName() != "index")
     {
         QMessageBox::information(window(),tr("Fehler"), tr("Keine gültige xml-Datei"));

     }
Ich bekomme jedesmal die Fehlermeldung von der MessageBox,
auch wenn es sich um eine xml-Datei mit dem root "index" handelt.

xml-Datei:

Code: Alles auswählen

<version....>
<!--Kommentare-->
<index>

Verfasst: 27. Februar 2009 11:29
von franzf
nkc hat geschrieben:xml-Datei:

Code: Alles auswählen

<version....>
<!--Kommentare-->
<index>
Das nix valid.

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<doc>
    <nnnnn>Hello</nnnnn>
    <oooo>Blubb</oooo>
</doc>
Du musst deine Tags schon schließen...

Verfasst: 27. Februar 2009 11:38
von nkc
Danke für den Hinweis.
Die xml-Dartei ist schon so beschrieben:

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<doc>
    <nnnnn>Hello</nnnnn>
    <oooo>Blubb</oooo>
</doc>
Ich hatte nur etwas kürzer gefasst.
Problem ist nur, dass ich prüfen möchte, ob es um eine xml-Datei handelt.
Wie beschrieben, bekomme ich immer die Meldung.

Verfasst: 27. Februar 2009 12:31
von franzf
Dann gib dir doch einfach mal den root.tagName() aus. Dann weißt du wo du bist.
Du kannst dir das eingelesene Dokument auch mit toString() in der Konsole ausgeben lassen, so siehst du ob alles korrekt eingelesen werden konnte.

Verfasst: 27. Februar 2009 12:51
von nkc
Sehr guter Hiweis.
Ich habe root.tagName() ausgegeben.
Und zwar erscheint nichts.

Verfasst: 27. Februar 2009 13:11
von franzf
Tja, dann musst du jetzt selber bissl debuggen...
die QDomDocument::setContent()-Funktionen nehmen zusäztliche Argumente für Fehlerbehandlung an.
Schau dir dann mal an, was dabei rauskommt.

Folgendes Testprogramm gibt nämlich genau das aus, was man erwartet, nämlich "doc":

Code: Alles auswählen

#include <QtXml>
#include <QtDebug>

const QString XML_DATA = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \
<!DOCTYPE xml> \
<doc> \
<nnnnn>Hello</nnnnn> \
<oooo>Blubb</oooo> \
</doc>";

int main()
{
    QDomDocument doc;
    doc.setContent( XML_DATA );
    QDomElement root = doc.documentElement();
    qDebug() << root.tagName();
    return 0;
}