QXmlStreamReader

Alles rund um die Programmierung mit Qt
Antworten
berti1
Beiträge: 4
Registriert: 18. August 2009 16:37

QXmlStreamReader

Beitrag 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"));
}

}

}
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag 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 ...
berti1
Beiträge: 4
Registriert: 18. August 2009 16:37

Beitrag von berti1 »

Danke sehr RHBaum für die Hilfe
Antworten