000
20.11.2008, 11:14 Uhr
dafduf
|
Huhu zusammen,
also ich wusste nicht genau in welchem Block ich meine Frage stelle, ob C++ oder hier bei Qt. Naja nun hab ich mich hierfür entschieden, hoffe das geht in Ordnung.
Also mein Problem ist, mein QXmlStreamReader will irgendwie nicht den Text zwischen einem Start- und EndTag einlesen. Bin grade am herumprobieren mit XML und es muss mit Qt sein. Kenne mich in der Sache XML noch nciht so aus. Hoffe ihr könnt mir da weiterhelfen. Folgender Code:
C++: |
#include <iostream> #include <string> #include <qxml.h> #include <QXmlStreamReader>
QString tag_inhalt;//Zum speichern der Elementetexte; QString tag;//Zum speichern der Elementnamen; QString datei_name;//Zum speichern des Namens der XML-Datei; QFile mein_q_file_1;//QFile, in dem die zu bearbeitende XML-Datei abgespeichert wird; QXmlStreamReader mein_xml_reader;//Erzeugen eines reader für die xml-datei; datei_name="meinxmlfile.xml"; if (datei_name.isEmpty()==TRUE) std::cout<<"Es wurde kein Dateiname angegeben!"<<std::endl; mein_q_file_1.setFileName(datei_name); if (mein_q_file_1.exists()==FALSE) std::cout<<"Datei mit angegebenen Namen existiert nicht!"; if (mein_q_file_1.isOpen()==TRUE)//Abfragen ob Datei offen ist und wenn ja schliessen; { std::cout<<"XML-Datei ist schon offen! Sie wird geschlossen und anschliessend wieder neu geoeffnet!"<<std::endl; mein_q_file_1.close(); } mein_q_file_1.open(QIODevice::ReadOnly); mein_xml_reader.setDevice(&mein_q_file_1); while (mein_xml_reader.atEnd()==FALSE) { mein_xml_reader.readNext(); if (mein_xml_reader.error()!=0) break; tag=mein_xml_reader.name().toString(); if (mein_xml_reader.isEndDocument()==FALSE) { if (mein_xml_reader.isStartElement()==TRUE) { std::cout<<"<"<<tag.toAscii().data()<<">"<<std::flush; } if (mein_xml_reader.isCharacters()==TRUE) { tag_inhalt=mein_xml_reader.readElementText(); if (mein_xml_reader.error()!=0) std::cout<<"Fehler beim Testeinlesen!"<<std::endl; std::cout<<"'"<<tag_inhalt.toAscii().data()<<"'"<<std::flush; } if (mein_xml_reader.isEndElement()==TRUE) { std::cout<<"</"<<tag.toAscii().data()<<">"<<std::endl; } } } std::cout<<"ENDE"<<std::endl; return 0; }
|
Hier die XML-Datei:
Code: |
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Personen> <Autor ID="1"><!--Erste Autor--> <Vorname>Frank</Vorname> <Nachname>Mueller</Nachname> <Groesse>1,78</Groesse> </Autor> <Autor ID="2"><!--Zweite Autor--> <Vorname>Stefan</Vorname> <Nachname>Maier</Nachname> <Groesse>2,98</Groesse> </Autor> </Personen>
|
Die Namen gibt er schon richtig aus, nur halt den Inhalt eines Elements will er nicht. Hoffe sehr ihr könnt mir da helfen, weil ich schon lange am rumprobieren bin und nicht vorankomme. Vielen Dank schon mal im Voraus.
Grüße, dafduf. Dieser Post wurde am 20.11.2008 um 11:43 Uhr von dafduf editiert. |