Qt 4.0.1: XML mit QDom



  • Hallo Forum.
    Nachdem ich bisher immer durchs lesen und suchen hier fündig geworden bin, hab ich jetz mal eine Frage, die hier noch nicht (ich hoff doch mal) gestellt und beantwortet wurde:

    QByteArray eingelesen, mit
    setContent(bytes) den Inhalt des QDomDocument festgelegt.

    Jetzt zur Frage:
    Ich will über die eingelesenen Bytes, (sind XML-konform, das file wird erstellt)
    einen Node bzw. Element drüber legen. Also etwa so:

    <timeStamp>
      <bytes>data</bytes>
    </timeStamp>
    

    Wobei hier timeStamp dem 'über'Node/Element entspricht.

    Nachdem ich mittlerweile permanent Node-Element-Document und Konsorten durcheinanderbringe, und das nur weil mal wieder auf'm Schlauch stehe, wollte ich mal euch dazu befragen.

    Merci schon mal.

    m.



  • Irgendwie habe ich deine Frage nicht verstanden. Kannst du sie nochmal ausführlich und genau stellen?



  • Jetz wo du's ansprichst, merk ich das das nicht grad der Hit ist 🙂 Also auf ein neues:
    Ich bekommen per TCP ein ByteArray, das ich in einer *.xml abspeichere (wird erledigt, per .setContent() und .save()). Aber um die Daten die reinkommen, würd ich gerne einen generierten timeStamp rumlegen. Das klappt aber nach dem .setContent() nicht so wie ich das will. Und das war dann schon die Frage.

    Aber ich bin mittlerweile auf eine andere Art der Betrachtungsweise gekommen:
    Ein statisches QDomDocument in das ich den timeStamp als node schmeisse. Die eintreffenden Daten lade ich in ein zur Laufzeit generiertes QDomDocument zur Weiterverarbeitung. Dann per .toString() lade ich die daten aus dem dynamischen in das statische rein.
    Zwar bin ich noch am implementieren, aber diesmal bin ich zuversichtlich 🙂

    Ich post den Code wenn er fertig is.

    m.



  • So, jetz hier mal ein mögliche Lösung:

    void XMLHandler::XMLParser(const QByteArray &data)
    {
    	QFile *file;
    	file = new QFile("ReceivedData.xml");
    
    	file->open(QIODevice::ReadWrite);
    
    	// creating a unique timestamp
    	QDateTime date = QDateTime::currentDateTime();
    	QDateTime time = QDateTime::currentDateTime();
    	QString dateString = date.toString(tr("yy-MM-dd"));
    	QString timeString = time.toString(tr("hh:mm:ss"));
    
    	// create incoming element
    	QDomElement incomEle = m_pDoc->createElement(tr("incoming"));
    	m_rootEle.appendChild(incomEle);
    
    	// create timestamp elements
    	QDomElement dateEle = m_pDoc->createElement(tr("date"));
    	QDomText dateNode   = m_pDoc->createTextNode(dateString);
    	incomEle.appendChild(dateEle);
    	dateEle.appendChild(dateNode);
    
    	QDomElement timeEle = m_pDoc->createElement(tr("time"));
    	QDomText timeNode   = m_pDoc->createTextNode(timeString);
    	incomEle.appendChild(timeEle);
    	timeEle.appendChild(timeNode);
    
    	// create tmp QDomDocument for data
    	QDomDocument tmpData;
    	tmpData.setContent(data);
    	incomEle.appendChild(tmpData);
    
    	// saving into *.xml
    	QTextStream out(file);
    	m_pDoc->save(out, 0);
    
    	file->close();
    
    	// deleting memory
    	delete file;
    	file = NULL;
    }
    

    Für Anregungen bin ich gerne offen.

    m.


Anmelden zum Antworten