Seite 1 von 1

XML Datei speichern

Verfasst: 10. Februar 2009 15:53
von nkc
Hallo,

wie kann ich eine XML-Datei abspeichern?

Folgendermaßen erstellt:

Code: Alles auswählen

QDomElement root = doc.createElement("MyML");
    doc.appendChild(root);

    QDomElement tag = doc.createElement("Greeting");
    root.appendChild(tag);

    QDomText t = doc.createTextNode("Hello World");
    tag.appendChild(t);

    QString xml = doc.toString();
Und nun weiß ich nicht, wie man die Datei speichern kann.
Mein nächster Schritt wäre:

Code: Alles auswählen

QFileDialog::getSaveFileName(this, tr("Save File"),
                          "/Neues Dokument", tr("xml-File (*.xml)"));
Danke

Verfasst: 10. Februar 2009 17:38
von ChMaster

Code: Alles auswählen

QString xml = doc.toString();
Das ist schon mal richtig. Was du noch benötigst ist QFile und QTextStream. In der Dokumentation von Qt findest du was du suchst. Wenn du damit mit zurrecht kommst einfach noch mal melden. :)

Verfasst: 10. Februar 2009 17:59
von RHBaum
Eigentlich is der String nen Umweg

bei laengeren dom Documenten wirst da vielleicht in schwierigkeiten kommen.

Besser:
void QDomNode::save (QTextStream & str, int indent ) const;

Macht genau das was du willst, das ding (bei bedarf stueckchenweisse) in einen (Text)Stream reinschieben.

wie man von nem QtextStream auf ein QFile (Hinweiss QIODevice) kommt, verraet dir die Documentation auch .

Ciao ...

Verfasst: 11. Februar 2009 10:18
von nkc
Hallo,

ich hatte das genau so veruscht,
mit

Code: Alles auswählen

QDomNode::save..
Nur, irgendwie hat das nicht hin.
Kannst du das an dem oben genannten zeigen?

Danke

Verfasst: 11. Februar 2009 10:41
von ChMaster
Die erste Möglichkeit ist:

Code: Alles auswählen

QFile qFile("C:/test.xml");
qFile.open( QIODevice::WriteOnly );

QTextStream out( &qFile );
out << xml;

out.flush(); // Würde ich jedem empfehlen
qFile.flush(); // Sicher ist sicher :-)
qFile.close();
Die zweite Möglichkeit ist:

Code: Alles auswählen

QFile qFile("C:/test.xml");
qFile.open( QIODevice::WriteOnly );

QTextStream out( &qFile );

node.save( out, 4 ); // "indent" sind glaube ich Leerzeichen