Chiarimento su QDom
-
Salve ,
sto creando un programma per la creazione di un file xml.
Solo che non capisco perchè rendendo due elementi figli di un QNodeDom io nel file xml non visualizzo i tag.Posto il programma
#include <QCoreApplication> #include <QtXml> #include <QtDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QDomDocument documento; QDomElement radice = documento.createElement("contenitore"); documento.appendChild(radice); QDomElement body=documento.createElement("body"); QDomText testoBody=documento.createTextNode("0"); body.appendChild(testoBody); QDomText testoHead=documento.createTextNode("1"); QDomElement head = documento.createElement("head"); head.appendChild(testoHead); QDomNode uno = body.firstChild(); uno.appendChild(head); radice.appendChild(uno); QFile file("C:../FileCreato/index.xml"); if (!file.open(QIODevice::WriteOnly|QIODevice::Text)) { qDebug() << "Open the file for writing failed"; } else { QTextStream stream(&file) ; stream << documento.toString(); file.close(); qDebug() << "Writing is done"; } return a.exec(); }
e qui il risultato
<contenitore>0</contenitore>
Grazie mille
-
QDomNode uno = body.firstChild();
L'unico child di
body
e'testoBody
quindiuno == testoBody
.uno.appendChild(head);
fallisce perche'uno
e' unQDomText
(puoi controllarlo conQASSERT(!uno.appendChild(head).isNull());
)radice.appendChild(uno);
crea quindi esattamente il risultato che hai.Sostituisci
QDomNode uno = body.firstChild(); uno.appendChild(head); radice.appendChild(uno);
con
radice.appendChild(head); radice.appendChild(body);
P.S.
Sei sicuro/a che vuoi usare DOM? una cosa come questa e' molto piu' semplice usandoQXmlStreamWriter
-
Ciao,
spiegazione chiarissima.Fatte le modifiche che mi hai suggerito.
Ho scelto quello solo perchè ho trovato un tutorial con cui provare.
Purtroppo essendo molto autodidatta è difficile poter valutare la scelta delle librerie ottimali.
Comunque provo volentieri quanto mi hai suggerito