XMLDatei auslesen und in TreeView schreiben???



  • Hallo!

    Ich versuche gerade mit dem Borland C++ Builder eine XML-Datei einzulesen und in ein TreeView umzumodeln! Wenn ich versuche die Knoten auszulesen und in den TreeView zu schreiben, kommt immer ein Konvertierungsfehler: Kann nicht von _di_IXMLNode in AnsiString umwandeln. Kennt da jemand einen Trick, oder geht das komplett anders?

    Gruss und tausend Dank im Vorraus, Janka



  • Wäre gut, wenn Du mal zeigen könntest (Source-Code), was Du da treibst.
    Ansonsten kann ich Dir empfehlen, mal die Eigenschaften und Methoden von IXMLNode anzusehen.
    Außerdem steht in der Hilfe auch einiges über die Verwendung der XML-Komponenten im Allgemeinen.

    Gruß,

    Alexander



  • Hallo!

    Also so sieht meine Beispiel XML-Datei aus:

    <root>
      <person nachname="Maier">
        <name>Thomas</name>
        <geb>121279</geb>
      </person>
      <person nachname="Maier">
        <name>Silvia</name>
        <geb>220983</geb>
      </person>
      <person nachname="Maier">
        <name>Kaharina</name>
        <geb>200582</geb>
      </person>
    </root>
    

    1. Versuch:

    Memo1->Lines->LoadFromFile(XMLDocument1->FileName);
    
        _di_IXMLNode Person1 = XMLDocument1->DocumentElement->ChildNodes[0];
        AnsiString Name = Person1->ChildNodes->Nodes["name"]->Text;
    

    Fehler:
    [C++ Fehler] Entwurf1_U.cpp(38): E2034 Konvertierung von 'IXMLNodeList' nach '_di_IXMLNode' nicht möglich

    Also gut, dann hab ich es halt abgeändert:

    2. Versuch:

    _di_IXMLNode Person1 = XMLDocument1->DocumentElement->ChildNodes;
        AnsiString Name = Person1->ChildNodes->Nodes["name"]->Text;
    

    Fehler: Jetzt kommt über den Debugger eine Exception der Klasse EAcessViolation, Meldung: Zugriffsverletzung bei Adresse....

    3. Versuch:

    _di_IXMLNode Person1 = XMLDocument1->DocumentElement->ChildNodes;
        TreeView1->Items->Add(TreeView1->TopItem,Person1->ChildNodes->Nodes["name"]);
    

    Fehler: [C++ Fehler] Entwurf1_U.cpp(40): E2034 Konvertierung von '_di_IXMLNode' nach 'AnsiString' nicht möglich

    Naja, vielleicht kannst du mir ja weiterhelfen, habe erst ganz neu mit XML und BCB angefangen, sodass auch sonst sicherlich alles falsch sein kann!

    Danke, Janka



  • Mal ein paar Worte zu Deinen Versuchen. Abgesehen davon, dass ich Dir nur nochmal raten kann, Dir die Eigenschaften der verschiedenen
    XML-Klassen anzuschauen, fällt mir bei Deinem Code folgendes auf:

    Janka schrieb:

    1. Versuch:

    _di_IXMLNode Person1 = XMLDocument1->DocumentElement->ChildNodes[0];
        AnsiString Name = Person1->ChildNodes->Nodes["name"]->Text;
    

    Fehler:
    [C++ Fehler] Entwurf1_U.cpp(38): E2034 Konvertierung von 'IXMLNodeList' nach '_di_IXMLNode' nicht möglich

    Du hast es ja schon selbst gesehen, dass ChildNodes vom Typ IXMLNodeList ist und nicht vom Typ IXMLNode (das _di_ steht für
    "Delphi Interface").

    Janka schrieb:

    2. Versuch:

    _di_IXMLNode Person1 = XMLDocument1->DocumentElement->ChildNodes;
        AnsiString Name = Person1->ChildNodes->Nodes["name"]->Text;
    

    Fehler: Jetzt kommt über den Debugger eine Exception der Klasse EAcessViolation, Meldung: Zugriffsverletzung bei Adresse....

    Woran kann das wohl liegen? Du greifst auf die Kindknoten des Dokumentknotens zu, d.h. auf die "person"-Knoten. Da sollte es klar
    sein, dass ein Zugriff über den Namen "name" fehlschlägt.

    Janka schrieb:

    3. Versuch:

    _di_IXMLNode Person1 = XMLDocument1->DocumentElement->ChildNodes;
        TreeView1->Items->Add(TreeView1->TopItem,Person1->ChildNodes->Nodes["name"]);
    

    Fehler: [C++ Fehler] Entwurf1_U.cpp(40): E2034 Konvertierung von '_di_IXMLNode' nach 'AnsiString' nicht möglich

    Die Fehlermeldung sagt eigentlich schon alles. Schau Dir mal die Eigenschaft Nodes von IXMLNode an, dann wirst Du's auch sehen.

    Um Fehlermeldungen aus dem zweiten Versuch zu vermeiden, könntest Du noch die automatische Knotengenerierung anschalten, über die
    Eigenschaft Options der Klasse IXMLDocument.

    Die verschiedenen Klassen und deren Verwendung sind in der BCB-Hilfe recht gut und ausführlich beschrieben. Schau mal unter
    "Verteilte Anwendungen entwickeln"|"Mit XML-Dokumenten arbeiten". Dort findest Du sicherlich alle Grundlagen, die Du für einen
    Start brauchst.

    Gruß,

    Alexander


Anmelden zum Antworten