Dateiformat prüfen

Alles rund um die Programmierung mit Qt
Antworten
nkc
Beiträge: 67
Registriert: 3. November 2008 12:01

Dateiformat prüfen

Beitrag 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
RavenIV
Beiträge: 267
Registriert: 21. Januar 2009 14:24
Wohnort: Waldshut

Beitrag von RavenIV »

Bei Qt ist doch auch eine XML-Klasse dabei.
Die hat bestimmt eine Validierungs-Möglichkeit...
Linux, das längste Text-Adventure aller Zeiten
STS301
Beiträge: 26
Registriert: 24. Januar 2009 18:50

Beitrag von STS301 »

du könntest es mit einem QOpenDialog machen und dem sagen, dass er nur die .xml Datein öffnen lässt
mfg STS301
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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.
nkc
Beiträge: 67
Registriert: 3. November 2008 12:01

Beitrag 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>
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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...
nkc
Beiträge: 67
Registriert: 3. November 2008 12:01

Beitrag 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.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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.
nkc
Beiträge: 67
Registriert: 3. November 2008 12:01

Beitrag von nkc »

Sehr guter Hiweis.
Ich habe root.tagName() ausgegeben.
Und zwar erscheint nichts.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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;
}
Antworten