Fehler beim Lesen von XML-Datei



  • Hallo alle zusammen,

    ich hänge mal wieder an einem kleinen Problem. Ich möchte aus einer XML-Datei Werte auslesen und habe mir dafür eine kleine Funktion geschrieben.

    OleVariant ReadFromXMLFile(const AnsiString Section, const AnsiString Ident) {
        try {
            _di_IXMLNodeList NodeList = tpodm->XMLDoc->DocumentElement->ChildNodes;
            _di_IXMLNode Node = NodeList->FindNode(Section);
            if (Node) {
                return Node->ChildNodes->FindNode(Ident)->NodeValue;
            }
        }
        catch (...) {
            //
        }
    }
    

    Nur leider bekomme ich in der Zeile

    return Node->ChildNodes->FindNode(Ident)->NodeValue;
    

    immer eine Zugriffsverletzung. Wenn ich die Stringvariable 'Ident' fest durch eine Zeichenfolge ersetze funktioniert das ganze. Aber es muß doch auch mit einer Variablen funkionieren. Hat da jemand einen Tipp für mich. Würde mich sehr freuen.

    Grüße und Gute Nacht
    Netzschleicher



  • Hallo

    Deine Beschreibung deutet darauf hin, das ein Node mit dem Namen aus Ident nicht existiert. Du solltest bei solchen Such-Funktionen immer erst die Rückgabe prüfen, bevor du diese verwendest :

    Node = Node->ChildNodes->FindNode(Ident);
     if (!Node)
     {
        Application->MessageBox("Nicht gefunden!", "Test", MB_OK);
     }
     return node->NodeValue;
    

    bis bald
    akari



  • Hallo akari,

    Vielen Dank für Deinen Tipp. Der hat mich auf die Lösung gebracht. Der XML-Node hätte existieren müssen, da allerding XML case-sensitive ist und ich bei der einen Abfrage mit der Groß- Kleinschreibung geschlampt habe, konnte der Node nicht gefunden werden. Dank Deinem Tipp mit der Prüfung auf einen gültigen Node ist mir das dann aufgefallen.

    Ist eigentlich Logisch diese Prüfung. Die Nodes sind ja nichts anderes als Pointer, und wenn ich in meiner Anwendung meine Resourcen-DLL dynamisch lade, prüfe ich ja auch ob 'LoadLibrary' einen gültigen Handle zurückgeliefert hat.

    Jetzt funktioniert es auf jeden Fall. 🙂



  • Eine kleine Frage hätte ich jetzt doch noch. Bei dem verwendeten TXMLDocument gibt es die Option 'doNodeAutoIndent' bei welcher die einzelnen XML-Nodes schön sauber eingerückt und auch leerzeilen entfernt werden.

    Das scheint jedoch nur nach einem Neustart des Programmes zu funktionieren. Nach dem Laden des XML-Files ist alles schön sauber geordnet. Wärend des Programmlaufs entsteht da schonmal etwas unordnung.

    Kann man das 'Aufräumen' irgendwie per Programm anstoßen?

    Grüße Netzschleicher.


Anmelden zum Antworten