Announcement

Collapse
No announcement yet.

Einfaches Auslesen von XML Informationen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Einfaches Auslesen von XML Informationen

    Ich habe folgendes Problem:
    Ich habe eine XML-Datei, sagen wir sie sieht so aus (stark vereinfacht):
    <?xml version="1.0" encoding="utf-8" ?>
    <Course name="test">
    <Description>abc</Description>
    <Certificate name="xyz"/>
    </Course>
    Ich suche jetzt die einfachste Möglichkeit an die Strings "test", "abc" und "xyz" zu kommen. Ich habe zwar schon im Internet nach Lösungen gesucht, aber alle schienen einfach viel zu komplex um einfach paar Texte aus dem Dokument auszulesen, dass ich mir dachte, dass muss doch leichter gehen...

    Meine Idee bisher war:
    Code:
    TXMLDocument *xmlFile = new TXMLDocument(asDir + AnsiString("\\") + "Description.xml");
    _di_IXMLNode xmlNode = xmlFile->ChildNodes->Nodes["Course"];
    AnsiString courseName = xmlNode->Attributes["name"];
    Es kompiliert zwar und wenn die Datei wirklich existiert habe ich auch ein xmlFile-Objekt, aber bei der zweiten Zeile bekommen ich dann eine Exception (manchmal was mit Listenindex, hatte aber auch schon EAccessViolation). Es scheint so als würde er gar keine Nodes aus dem Dokument laden?
    Außerdem bin ich nicht sicher wie ich an den text "abc" komme, da er ja kein Attribut ist.

    Hat jemand vielleicht ein paar Tipps für mich? Wenn ich diesen einfach Beispielfall gelöst hätte, würde ich den Rest sicherlich selbst hinbekommen.

  • #2
    Der Name des Nodes ist Course. Dieser wiederum hat ein Attribut Names name. Erst den Knoten holen und diesen nach dem Attribut befragen. Der Knoten hat weitere Kinder. Description und Certificate. Letzterer hat auch ein Attribut Names name
    Christian

    Comment


    • #3
      Aber das mache ich doch im Beispiel oben schon. Und bei dem Node "Course" holen gibt es ja bereits einen Fehler.

      Edit: Über "DocumentElement" schaffe ich es jetzt zumindest den Hauptknoten zu bekommen. Aber sobald ich auf den Knoten "ChildNodes" anwende, bekomme ich wieder eine EAccessViolation, egal wie simple ich den Inhalt in der Datei mache.

      Code:
      TXMLDocument *xmlFile = new TXMLDocument(asDir + AnsiString("\\") + "Description.xml");
      _di_IXMLNode xmlNode = xmlFile->DocumentElement;
      if(AnsiString(xmlNode->NodeName) == "Course") {
      	ShowMessage(xmlNode->Attributes["name"]); // funktioniert
      	_di_IXMLNodeList nodeList = xmlNode->ChildNodes; // exception
      }
      Code:
      <?xml version="1.0" encoding="utf-8" ?>
      <Course name="IL GEM 4000">
      <test>Blubber</test>
      </Course>
      Zuletzt editiert von Rya; 17.09.2012, 09:43.

      Comment


      • #4
        Es wird keine Instanz mit dem XML-Inhalt erstellt. Dieser wird mit LoadFromFile gelesen. Im Konstruktor wird der Owner angegeben
        Christian

        Comment

        Working...
        X