XML - File einlesen und auslesen mit der DOM-Api von Qt?
-
Hallo,
ich bin gerade erst dabei mich in Qt zurecht zu finden und hab leider noch das ein oder andere Problem ...
Mein Problem besteht darin, das ich ein XML - File einlesen soll, muss es auch noch manipulieren und danach wieder als XML - File speichern. Dabei habe ich zunächst versuch mit Hilfe des Buches "Qt4, Einführung in die Applikationsentwicklung" das Problem anzugehen. Jedoch war das bisher noch nicht so erfolgversprechend ...
Ich habe das XML-File eingelesen und habe dabei alle mir bekannten (auch die aus der Qt-Doku) verwendet um die Datei einzulesen. Dies funktioniert bis zur Übertragung der Daten an das QByteArray "content" fehlerfrei. Jedoch treten bei der "Transformation" zu einem QDomDocument Fehler auf.
Mein Programm sieht folgendermaßen aus:QFile file("wechsel.xml"); if (!file.open(QIODevice::ReadOnly)) return 1; QByteArray content = file.readAll(); QString StrContent = QString::QString(content); QString errorMessage; int line, col; QDomDocument doc; if(!doc.setContent(StrContent, false, &errorMessage, &line, &col)) { cout << "Error in Line " << line << ", Column " << col << ":" << qPrintable(errorMessage) << endl; return 1; } file.close(); QByteArray Output; Output = doc.toByteArray(1);
Hier das originale XML – File, “wechsel.xml” :
<?xml version="1.0" encoding="utf-8" standalone="yes" ?> <root> <book name="MissionToFix"> <title name="SaveString">cd 'C:\Programme\DTT\Examples\Books\Bookland'</title> <title name="buffer">heap</title> <title name="NewFileName">..\..\DTT\Examples\Books\savebuffer.cpp</title> <title name="Book">false</title> </book> <book name="FirstRoot"> <title name="Magic">3</title> <title name="version">12</title> </book> <book name="Potter"> <title name="isbn">45</title> <title name="Verlag">BookLand</title> </book> </root>
Und hier mein Ergebnis:
<?xml version='1.0' encoding='utf-8' standalone='yes'?> <root> <book name="MissionToFix" > <title name="SaveString" >cd 'C:\Programme\DTT\Examples\Books\Bookland'</title> <title name="buffer" >heap</title> <title name="NewFileName" >..\..\DTT\Examples\Books\savebuffer.cpp</title> <title name="Book" >false</title> </book>
Die Fehler sind einerseits bei der XML-Deklaration ('' anstatt "") und im Abschnitt:
<title name="SaveString" >
Kann mir da vielleicht jemand helfen?
-
steht doch alles in der doku:
wenn du das qdomdocument hast, hangelst du dich an den qdomnodes den baum hinunter...
-
Vielleicht einfach mal mit toString() versuchen.
Welche QT Version verwendest du?
-
Selbstverständlich habe ich auch mit der Doku von Qt gearbeitet, aber trotzdem bleibt weiterhein der Fehler. Ich habe alle "setContent"-Methoden benutzt aber bei jeder treten wieder die gleichen Fehler auf.
bool setContent ( const QByteArray & data, bool namespaceProcessing, QString * errorMsg = 0, int * errorLine = 0, int * errorColumn = 0 ) bool setContent ( const QString & text, bool namespaceProcessing, QString * errorMsg = 0, int * errorLine = 0, int * errorColumn = 0 ) bool setContent ( QIODevice * dev, bool namespaceProcessing, QString * errorMsg = 0, int * errorLine = 0, int * errorColumn = 0 ) bool setContent ( const QString & text, QString * errorMsg = 0, int * errorLine = 0, int * errorColumn = 0 ) bool setContent ( const QByteArray & buffer, QString * errorMsg = 0, int * errorLine = 0, int * errorColumn = 0 ) bool setContent ( QIODevice * dev, QString * errorMsg = 0, int * errorLine = 0, int * errorColumn = 0 ) bool setContent ( QXmlInputSource * source, QXmlReader * reader, QString * errorMsg = 0, int * errorLine = 0, int * errorColumn = 0 )
Vielleicht hab ich irgendwas falsch gemacht, muss ich ja sonst wäre da kein Fehler
Hat jemand einen Tip?