Seite 1 von 1

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

Verfasst: 7. Dezember 2006 12:41
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

Verfasst: 7. Dezember 2006 17:33
von upsala
Klar, die Datei ist unerwartet zu Ende... Da du uns keinen Code zeigst, kann es auch nicht so dringend sein

Verfasst: 7. Dezember 2006 17:37
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

Verfasst: 7. Dezember 2006 19:47
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.

Verfasst: 8. Dezember 2006 09:56
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.

Verfasst: 8. Dezember 2006 10:09
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...