Problem mit XML-Daten
-
Hi, mal wieder nen Problem.
Diesmal gehts um das Laden von XML-Daten.
Habe mich mal hier im Forum schlau gemacht.
Wollte dann ein Programm schreiben was wie schon bei jemand Anderem die Werte aus Knoten ausließt. Problem, die XML-Datei wird nicht geöffnet. Bekomme nur Fehlermeldung :"XML-File error!" da isch diesen Text in meiner Exception hinterlegt habe.Die XML-Datei befindet sich im Ordner, wo meine exe-Datei von meiner Programmierung sich befindet. Hier der Quelltext:
Esrtmal die CPP-Datei
pragma hdrstop #include "UnitXMLClass.h" #pragma package(smart_init) //--------------------------------------------------------------------------- XMLData ObjectText(ExtractFilePath(Application->ExeName)+"objecttext.xml"); // Konstruktor __fastcall XMLData::XMLData(AnsiString FilePath) { /* Übergabewerte : AnsiString File - Deiteiname bzw. Pfad der XML-Datei auf die zugegriffen werden soll */ try { XMLFile = LoadXMLDocument(FilePath); // Hier tritt fehler auf // XML-Datei öffnen XMLNodeList = XMLFile->DocumentElement->ChildNodes; // XML-Knoten einer Liste zuordnen NodeNum = XMLNodeList->Count; // Anzahl der Knoten in Variable sichern } catch (...) { try { throw Exception("XML-File error!"); } catch (Exception &exception) { Application->ShowException(&exception); // Sollte es ein Problem beim öffnen der Datei geben, wird eine Fehlermeldung ausgegeben } } } ...... //--------------Jetzt die Headerdatei:
#ifndef UnitXMLClassH #define UnitXMLClassH #include <vcl.h> #include <XMLDoc.hpp> //--------------------------------------------------------------------------- class XMLData { // private deklarierte Klassenvariablen und Methoden private: // Variablen _di_IXMLDocument XMLFile; // XML-Dokument _di_IXMLNodeList XMLNodeList; // XML-Knoten _di_IXMLNode XMLValueNode; // XML-Knotenname int NodeNum; // Anzahl der Knoten // Methoden AnsiString __fastcall getXMLValue(AnsiString Prefix, AnsiString Id, AnsiString ReturnValue); // public deklarierte Klassenvariablen und Methoden public: // Konstruktor, Destruktor __fastcall XMLData(AnsiString FilePath); ~XMLData(){} // protected deklarierte Klassenvariablen und Methoden protected: }; extern XMLData ObjectText; //------------------------Kann mir jemand helfen? Der Fehler tritt im Konstruktor auf.
-
Hallo
Vermutlich gibt es die Datei mit dem in "FilePath" angegebenen Namen nicht oder die vorhandene Datei ist keine gültige XML-Datei.
bis bald
akari
-
Erstmal danke für die schnelle Antwort.
Leider gibt es die Datei und den Pfad auch. Die XML-Datei müsste auch gültig sein.
Alles gecheckt. Hätte ich da wohl zuschreiben müssen.
-
Hallo
Trotzdem halte ich eine nicht passende Pfadangabe für das Problem. Schau mal mit dem Debugger nach was wirklich zur Laufzeit in der Variable FilePath steht, wenn sie für den Aufruf verwendet wird.
bis bald
akari
-
Ich schaue mal schnell.
Schreibe dann das Ergebnis des Debugging hier nieder.
-
Wenn der Debugger in der besagten Zeile ankommt, hat FilePath folgenden Wert:
"C:\\Dokumente und Einstellungen\\User\\Eigene Dateien\\C_Projects\\programm\\objecttext.xml"
Dieses entspricht tatsächlich dem Ziel. Allerdings springt er in der fehlerhaften Zeile in den Delphi-Code und es kommt beim Debuggen ein fenster, bei dem nach der system.pas gefragt wird.
-
Entferne doch mal die drei Zeilen
try { throw Exception("XML-File error!"); }und lass dir dann die genaue Exception ausgeben.