Seite 1 von 1

QXmlStreamReader

Verfasst: 21. August 2009 14:42
von berti1
Hallo,
Ich bin einen Qt Anfänger, ich möchte eine Xml-Datei mit QXmlStreamReader lesen. Ich habe schon was was geshrieben aber es funktioniert nicht. Kann mir jemand sagen was in meiner Quellecode nicht stimmt oder ein besseren Vorschlag?
So sieht meine Quellecode:

void readFile(const QStream &ifileName)
{
QXmlStreamReader reader;
QFile file(fileName);
reader.setDevice(&file);

while(!reader.atEnd())
{
reader.readNext()
if(reader.isStartElement()) //reader.isStartElement soll true zurückgeben
{
if(reader.name() == "element") //Was bedeutet hier element ?
//Ist die Name des Wurzels meine XML-Datei
readXMLFile();
}else
{
reader.raiseError(QObject::tr("The File is not an Element version"));
}

}

}

Verfasst: 21. August 2009 15:44
von RHBaum

Code: Alles auswählen

void readFile(const QStream &ifileName)
{
	QXmlStreamReader reader;
	QFile file(fileName);
	reader.setDevice(&file);

	while(!reader.atEnd())
	{
		reader.readNext()
		if(reader.isStartElement()) //reader.isStartElement soll true zurückgeben
		{
			if(reader.name() == "element") //Was bedeutet hier element ?
			//Ist die Name des Wurzels meine XML-Datei
			readXMLFile(); 
		}
		else
		{
			reader.raiseError(QObject::tr("The File is not an Element version"));
		}
	}
}
Mal lesbarer formatiert :-)

Wo ist dein Problem genau ???
if(reader.isStartElement()) //reader.isStartElement soll true zurückgeben
Deinen Reader schickst du in eine iterationsschleife, soweit sicher klar ...
reader.isStartElement() gibt genau dann true zurueck, wenn du beim XML Kopf quasi bist, also im ersten schritt der iterationsschleife bist, und dein XML dokument ueberhaupt sowas hat !

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?> 
Dast ist eine typische kopfzeile, also quasi ein StartElement.


if(reader.name() == "element") //Was bedeutet hier element ?

Code: Alles auswählen

<Project name="NM2StatusAutomat" type="trunk" version="" />
Das ist zum beispiel ein XML element, in Kurzschreibweisse, hat ja auch keine unterelemente und keine TEXT oder DATA felder.

Und nicht irritieren lassen, der Name des Elements, aus sicht des Parsers, ist hier "Project" !!!

Das "name= "NM2StatusAutomat"" ist ein Attribut des Elements, das Attribut hat den Namen"name" und den Wert "NM2StatusAutomat"....

Also XML Tags, also Elemente im Qt Jargon, sehen immer so aus
Kurzform:

Code: Alles auswählen

<TAGNAME ATTRIBUTNAME="ATTRIBUTVALUE" ATTRIBUTNAME="ATTRIBUTVALUE" />
LangForm:

Code: Alles auswählen

<TAGNAME ATTRIBUTNAME="ATTRIBUTVALUE" ATTRIBUTNAME="ATTRIBUTVALUE"> 
    .... Unterelemente
</TAGNAME> 
TAGNAME ist dabei der Name des Elements !
Attribute sind kein muss, kann beliebig viele haben aber auch garkeins

Ciao ...

Verfasst: 22. August 2009 19:06
von berti1
Danke sehr RHBaum für die Hilfe