Seite 1 von 1

[gelöst]Parsing-Fehler in XML-Dokument

Verfasst: 25. Januar 2009 19:33
von Kay
Hallo Leute,

ich habe eine XML-Datei erstellt, um Projektdaten für meinen Editor speichern zu können.
Gespeichert wird wie folgt:

Code: Alles auswählen

out.setCodec("UTF-8");
		out<<DomDocument->toString(4).toUtf8();
	
Wobei die UTF-8 Codierung nachträglich hinzugefügt wurde und keinen Effekt hat.

Die Datei die gespeichert wird sieht wie folgt aus:

Code: Alles auswählen

<!DOCTYPE OSEditorProjektdatei>
<Project ProjectName="ProjektTest6.osp" />
<Files>
    <File FileName="unbenannt2.c" BuildCommand="" FileType="c" />
</Files>
Geladen wird sie wie folgt:

Code: Alles auswählen

QTextStream	In(&File);
		QString		XMLText;

		In.setCodec("UTF-8");

		XMLText=In.readAll();

		if(!DomDocument->setContent(XMLText.toUtf8(), &ErrorStr, &ErrorLine, &ErrorColumn))
		{
			QMessageBox::warning(this, tr("Fehler!"), tr("Projekt konnte nicht geladen werden! \n Fehler in Spalte %1, Zeile %2: %3").arg(ErrorColumn).arg(ErrorLine).arg(ErrorStr));
			return false;
		}
Wobei die UTF-8 Kodierung nur aus Redundanzgründen da ist und auch nichts an meinem Problem änderte. Ich habe auch schon der "setContent"-Funktion die Datei direkt als QIODevice übergeben, was das Problem auch nicht ändert.

Wenn ich nun aus meinem Programm heraus die Datei lade, erhalte ich beim Laden in der MessageBox folgende Fehlermeldung:
"Projekt konnte nicht geladen werden!"
"Fehler in Spalte 2, Zeile 3: unexpected character"

Wodurch kann dieser Fehler auftreten? Ich habe schon einiges probiert und auch die Datei mal mit Hand editiert, aber woher die Fehlermeldung kommt, konnte ich noch nicht rausfinden. Hat von euch jemand eine Idee?

Grüße,
Kay

Verfasst: 25. Januar 2009 20:27
von upsala
Zeile 3 ist bei dir <Files>. Das dürfte aber nicht mehr vorkommen, da dein DocumentElement schon 'Project' ist. Und dieses wurde zu früh geschlossen.

Verfasst: 25. Januar 2009 20:37
von Kay
Hm,

Klingt einleuchtend. Und wie mache ich das dann, das Files mit zum Projekt gehört. Kannste da mal n kleines Beispiel geben? Muss das irgendwie so machen, dass ich jederzeit Files ranhängen kann.

Danke,
Kay

Verfasst: 25. Januar 2009 20:45
von upsala

Code: Alles auswählen

<!DOCTYPE OSEditorProjektdatei> 
<Project ProjectName="ProjektTest6.osp"> 
  <Files> 
    <File FileName="unbenannt2.c" BuildCommand="" FileType="c" /> 
  </Files> 
</Project>

Verfasst: 25. Januar 2009 21:26
von Kay
Hallo,

ich hatte zwar mehr ein Code-Beispiel für die Umsetzung deiner Empfehlung gemeint, aber ich habs jetzt selbst rausbekommen, wie ich den Code umschreibe. Also danke dir.

Das Problem war, dass ich "Files" mit DomDocument->appendChild(Files) angehängt habe. Dadurch wurde dann quasi das zweite Wurzelelement aufgemacht. Hab die entsprechende Stelle jetzt in Root.appendChild(Files) geändert. Wobei Root halt der "Project"-Zweig ist. Jezt klappts soweit. Danke nochmal. Ist halt gut, wenn man sich mit XML auskennt ;)

Grüße,
Kay