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
[GELÖST]XML unter Linux bringt Fehlermeldung unter Win gehts
[GELÖST]XML unter Linux bringt Fehlermeldung unter Win gehts
Zuletzt geändert von bierber am 14. Dezember 2006 14:19, insgesamt 1-mal geändert.
Wollte halt erstmal abwarten ob jemand das Problem kennt bevor ich das Forum mit meinen Gedanklichen ergüssen quäle
Also Vielleicht kann jemand was damit anfangen. und wenn ihr m
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();
}
}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.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.
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...
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...