[GELÖST]XML unter Linux bringt Fehlermeldung unter Win gehts

Alles rund um die Programmierung mit Qt
Antworten
bierber
Beiträge: 72
Registriert: 27. November 2006 14:12

[GELÖST]XML unter Linux bringt Fehlermeldung unter Win gehts

Beitrag von bierber »

Hallo,

habe ein Programm welches mir XML-Dateien ändert. Dies mache ich mit QDom.(Habe mal gelesen es soll ein Bug in der Klasse sein aber nicht herausbekommen was das ist. kann das Damit zusammenhängen?)
Diese Dateien sind die TS-Dateien die ja bekanntlich nach dem XML-Standard aufgebaut sind.

Starte ich mein Programm unter Windows geht es Problemlos und ich bekomme keine Fehler.

Starte ich das Selbe Projekt unter Linux bekomme ich die Meldung

unexpected end of file

Weiß jemand woran das liegen kann?

Es währe sehr dringend weil das ganze bis heute Abend unter Linux laufen muß.

Vielen Dank mal für eure Hilfe
Zuletzt geändert von bierber am 14. Dezember 2006 14:19, insgesamt 1-mal geändert.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Klar, die Datei ist unerwartet zu Ende... Da du uns keinen Code zeigst, kann es auch nicht so dringend sein
bierber
Beiträge: 72
Registriert: 27. November 2006 14:12

Beitrag von bierber »

Wollte halt erstmal abwarten ob jemand das Problem kennt bevor ich das Forum mit meinen Gedanklichen ergüssen quäle

Code: Alles auswählen

void SlFeTeachPosDOM::DOMChangeLangText(QString sXmlFile, QString *SymbText, QString LangText, QString *Errortext)
{
	QFile xmlFile(sXmlFile);
	xmlFile.open(QIODevice::ReadOnly);
	QByteArray content = xmlFile.readAll();
	xmlFile.close();
	

	QDomDocument	doc;
	QString			errorMessage;
	QString			srcString;
	QString			test;
	bool			b_SymbTextfound;
	bool			b_Ready;
	int line, col, x;
	SlFeTeachPosDOM* pMyTeachPosDOM = 0;
	bool b_Error;
	bool m_TagFrei;
	int nCounter;
	b_Error=false;
	if (!doc.setContent(content, &errorMessage, &line, &col))
	{
		b_Error=true;
	}
	*Errortext=errorMessage;
	if(!b_Error)
	{
		xmlFile.remove();
		QDomNodeList anchors = doc.elementsByTagName((QString)("message"));
		QDomNodeList anchors2 = doc.elementsByTagName((QString)("name"));
		QDomNodeList anchors3 = doc.elementsByTagName((QString)("source"));
		QDomNodeList anchors4 = doc.elementsByTagName((QString)("translation"));
		b_SymbTextfound=false;
		b_Ready=false;
		for (int i=0;i<anchors2.length();i++)
		{
			QString dummy=anchors2.at(i).toElement().text();
			if ((QString) anchors2.at(i).toElement().text()=="SlFeTeachCtx")
			{
				for(int j=0;j<anchors.length();j++)
				{
					if (anchors.at(j).toElement().parentNode()==anchors2.at(i).toElement().parentNode())
					{
						for (int k=0;k<anchors3.length();k++)
						{
							dummy=anchors3.at(k).toElement().text();
							if (anchors3.at(k).toElement().text()==*SymbText && anchors3.at(k).parentNode().parentNode()== anchors.at(j).toElement().parentNode())
							{
								b_SymbTextfound=true;
								dummy=anchors4.at(k).toElement().text();
								anchors4.at(k).removeChild(anchors4.at(k).firstChild());
								QDomText Text=doc.createTextNode(LangText);
								anchors4.at(k).appendChild(Text);
								break; //Symbolname wird geändert
							}
						}
						if (b_SymbTextfound)
						{
							b_Ready=true;
							break;
						}
						QString strSymbText=*SymbText;
						QDomDocumentFragment fragment = doc.createDocumentFragment();
						QString dummy;
						QDomElement neuSource = doc.createElement("source");
						QDomElement neuComment= doc.createElement("comment");
						QDomElement neuTranslation= doc.createElement("translation");
						QDomElement neuMessage= doc.createElement("message");
						QDomText Text=doc.createTextNode(strSymbText);
						neuSource.appendChild(Text);
						Text=doc.createTextNode(LangText);
						neuTranslation.appendChild(Text);
						Text=doc.createTextNode("beliebiger Kommentar");
						neuComment.appendChild(Text);
						neuMessage.appendChild(neuSource);
						neuMessage.appendChild(neuComment);
						neuMessage.appendChild(neuTranslation);
						fragment.appendChild(neuMessage);
						QDomNode para = anchors.at(j).toElement().parentNode();
						para.insertAfter(fragment,para.firstChild()); //Symbolname wird neu angelegt
						b_Ready=true;
						break;
					}
					if (b_Ready)
					{
						b_Ready=true;
						break;
					}
				}
			}
			if (b_Ready)
			{
				b_Ready=true;
				break;
			}
		}
		QByteArray data=doc.toByteArray(2);
		
		xmlFile.open(QIODevice::ReadWrite);
		xmlFile.write(data);
		xmlFile.close();
		doc.clear();
	}
							
}
Also Vielleicht kann jemand was damit anfangen. und wenn ihr m
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Es Newsgroups/-foren ist es üblich Code der Probleme macht auf ein Minimum zu reduzieren. Außerdem ist es hilfreich die Stelle mitzuteilen, an der der Fehler auftritt.
bierber
Beiträge: 72
Registriert: 27. November 2006 14:12

Beitrag von bierber »

Es Newsgroups/-foren ist es üblich Code der Probleme macht auf ein Minimum zu reduzieren. Außerdem ist es hilfreich die Stelle mitzuteilen, an der der Fehler auftritt.
Wenn ich wüßte wo der Fehler liegt hätte ich das auch gemacht. Ich kann nur unter Windows debuggen und da läuft es ja ohne Probleme.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Debuggen heißt nicht, daß man einen Debugger verwenden muß.

Du kannst qDebug() (bzw. cout <<...) verwenden um anzuzeigen, ab wann der Fehler auftritt.

Oder du minimierst den Code solange bis der Fehler nicht mehr auftritt.

Dann solltest du dich mal schlau machen, ob dein XML-File wirklich korrekt ist, aber ich denke daß hast du schon gemacht...
Antworten