[C++] xml datei einlesen

zerberos

Well-known member
ID: 58651
L
30 Mai 2006
75
0
Hallo,

ich bin gerade dabei ne xml datei mit borland c++ 5 einzulesen. Komme da aber irgendwie nicht richtig weiter...

Mein Code bis jetzt:

if (OpenDialog2->Execute())
{

string xmlstruktur;

OpenDialog2->DefaultExt="XML";
OpenDialog2->FileName="*.xml";
xmlstruktur=FileOpen(OpenDialog2->FileName, fmOpenRead);

}
 
Fehlermeldung? Definierte Header-Files? Resultat?
Sorry, aber meine Glaskugel funktioniert heute Morgen nicht so richtig. :mad:
 
wollte eher wissen ob der ansatz wie ich den habe so in ordnung ist oder ob es eine andere bessere möglichkeit gibt



PS: Warum funktioniert deine Glaskugel heute morgen nicht? Meine funktioniert einwandfrei. Konnte sogra schon die Lottozahlen für morgen sehen
 
Das da macht ja noch nichts weiter als einen Filedeskriptor anlegen. Interessant wirds erst, wenn du das XML dann parst. Liefert Borland dafür eine Bibliothek mit?
 
Ich muss es ja nur schaffen den inhalt der xml datei in ne variable(string) zu bekommen. Und dann muss ich im string einfach mit replace was ersetzen.

nur ich hänge momentan beim auslesen. FileHandle gibt mir momentan eine -1 zurück. Was ja nen Fehler bedeutet....

if (OpenDialog2->Execute())
{

String xmlstruktur;
int FileHandle;

OpenDialog2->DefaultExt="XML";
OpenDialog2->FileName="*.xml";
FileHandle=FileOpen(OpenDialog2->FileName, fmOpenRead);

ShowMessage(FileHandle);
 
Wenn ich das richtig lese, startest du den Dialog mit Execute(), setzt anschließend den Dateinamen auf "*.xml" und öffnest dann diese Datei. Dann bringt der Dialog doch eigentlich nichts (wenn sowieso *.xml geöffnet wird).
 
mit dem dialog will ich die datei auf der festplatte auswählen können.

Also wenn auf den senden button geklickt wird soll der dialog kommen und man kann die zuöffnende datei auf der festplatte auswählen

Das klappt auch nicht 100%, da der mir auch dateien anderer dateitypen anzeigt...

Bei nen anderen OpenDialog im selben Programm funktioniert das. Wenn ich beim 2 Dialog nichts als Dateiytp angebe nimmt der auch irgendwie die Dateityp definition vom ersten OpenDialog
 
So frisch ist mein VCL-Wissen auch nicht mehr, aber folgendes ist mir aufgefallen:
Code:
// OpenDialog2->Filter ist für Filtern bestimmter Dateinamen zuständig

if (OpenDialog2->Execute()) //OpenDialog2 wird geöffnet, folgender Block falls auf OK geklickt wurde
{

String xmlstruktur;
int FileHandle;

OpenDialog2->DefaultExt="XML"; 
OpenDialog2->FileName="*.xml"; //hier wird der Name der zu öffnenden Datei GEÄNDERT, nachdem der Benutzer vorher schon einen ausgewählt hatte
FileHandle=FileOpen(OpenDialog2->FileName, fmOpenRead); // hier wird die Datei *.xml geöffnet, die vielleicht nicht existiert und die der Benutzer vermutlich nicht ausgewählt hat
Ich würde die beiden Zeilen über FileOpen mal weglassen und gucken ob es dann geht.
 
habs jetzt.

hab das ganze jetzt in nem string

das string will ich jetzt wieder in ne datei zurückschreiben:

xmlstruktur->SaveToFile("C:\datei.txt");

bekomme aber jetzt folgenden Fehler

[C++ Fehler] ManErled_Client.cpp(210): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich
 
Erstmal muss der Backslash im Pfad escaped werden ("C:\\datei.txt"). Der Fehler liegt aber woanders:

xmlstruktur.SaveToFile("C:\\datei.txt");

muss es heißen, wenn xmlstruktur kein Pointer, sondern ein Objekt ist.