Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

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 quindi uno == testoBody.

    uno.appendChild(head); fallisce perche' uno e' un QDomText (puoi controllarlo con QASSERT(!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 usando QXmlStreamWriter



  • 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


Log in to reply