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.


Anmelden zum Antworten