XML in C++

stevecmr

Grünschnabel
Hallo,

ich habe ein kleines Problem. Meine C++ Kenntnisse sind sehr
eingeschränkt, für ein Projekt muss ich ein XML Dokument einlesen.
Ich habe jetzt schon ein paar Dinge versucht, aber irgendwo bin ich
immer gescheitert. Hat jemand ein paar Tips wie man möglichst leicht
XML Dokumente einlesen kann?
danke im vorraus
Steve
 
Hi.

Das geht eigentlich sehr einfach - mit der entsprechenden Bibliothek. Für Windows in Verbindung mit Visual C++ würde sich die Microsoft XML Bibliothek (msxml) anbieten. Für Dev-Cpp z.B. TinyXml.

Einfach mal hier im Forum und mit Google suchen...

Gruß
 
Hallo deepthroat erste mal danke,
ich bin leider noch nicht damit durch und wenn ich die Oberfläche Eclipse benutze, gilt das auch noch?.Und wie soll ich diese tinyXML in meine Code einfügen?.

Also ich sollte folgendes XML Doc lesen
<grafen>
<graf id =" 0">
<x_werte> x_musterwerte </x_werte>
<y_werte>y_musterwerte</y_werte>
<z_werte>z_musterwerte</z_werte>
</graf>
<graf id =" 1">
<x_werte> x_musterwerte </x_werte>
<y_werte>y_musterwerte</y_werte>
<z_werte>z_musterwerte</z_werte>
</graf>
.
.
.

<graf id =" n">
<x_werte> x_musterwerte </x_werte>
<y_werte>y_musterwerte</y_werte>
<z_werte>z_musterwerte</z_werte>
</graf>
</grafen>

danke in Vorraus
 
Hi.

Im Grunde ist es egal welche IDE du verwendest. Allerdings musst du dich schon selbst damit auskennen wie die IDE funktioniert und wo man etwas einstellt. Das ist ja bei Eclipse (/CDT) kein Problem, da sich jede Menge Tutorials, HowTos und "Webinare" finden lassen.

Obwohl bereits in der TinyXml Distribution Beispiele enthalten sind, hier mal ein Minimalbeispiel:
C++:
#include <cstdlib>
#include <iostream>

#include "tinyxml/tinyxml.h"

using namespace std;

int main(int argc, char *argv[])
{
    TiXmlDocument doc("demo.xml");
    
    if (doc.LoadFile())
    {
       TiXmlNode* element = doc.RootElement();
       while (element != 0) {
             cout << element->Value() << endl;
             
             element = element->FirstChild();
       }
    }
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
Die TinyXml Archivdatei kannst du einfach in das Verzeichnis von deinem Projekt entpacken. Dann muss man lediglich noch die tinyxml Bibliothek beim Linken angeben.

Gruß
 
Also bei mir geht das Beispiel nicht, Dev-Cpp gibt mir einen Haufen Fehler:
Code:
  [Linker error] undefined reference to `TiXmlDocument::TiXmlDocument(char const*)' 
  [Linker error] undefined reference to `TiXmlDocument::LoadFile(TiXmlEncoding)' 
  [Linker error] undefined reference to `vtable for TiXmlDocument' 
  [Linker error] undefined reference to `TiXmlNode::~TiXmlNode()' 
  [Linker error] undefined reference to `TiXmlNode::~TiXmlNode()' 
  [Linker error] undefined reference to `TiXmlString::nullrep_' 
  [Linker error] undefined reference to `TiXmlNode::FirstChildElement() const' 
  ld returned 1 exit status

EDIT: Visual C++ Express 2005 Compiliert es auch nicht, warum funktionieren Beispiele nie
 
Zuletzt bearbeitet:
Also bei mir geht das Beispiel nicht, Dev-Cpp gibt mir einen Haufen Fehler:
Code:
  [Linker error] undefined reference to `TiXmlDocument::TiXmlDocument(char const*)' 
  [Linker error] undefined reference to `TiXmlDocument::LoadFile(TiXmlEncoding)' 
  [Linker error] undefined reference to `vtable for TiXmlDocument' 
  [Linker error] undefined reference to `TiXmlNode::~TiXmlNode()' 
  [Linker error] undefined reference to `TiXmlNode::~TiXmlNode()' 
  [Linker error] undefined reference to `TiXmlString::nullrep_' 
  [Linker error] undefined reference to `TiXmlNode::FirstChildElement() const' 
  ld returned 1 exit status

EDIT: Visual C++ Express 2005 Compiliert es auch nicht, warum funktionieren Beispiele nie
Wie bereits gesagt muss selbstverständlich die tinyxml Bibliothek zum Projekt gelinkt werden. In Dev-Cpp kann man übrigens die TinyXml Entwicklungsdateien mittels Tools->Update Manager installieren. Zum Hinzulinken der Bibliothek reicht es dann in den Projektoptionen auf der Parameter Lasche für den Linker die Option "-ltinyxml" einzufügen.

Gruß
 
Oh hatte ich überlesen sorry, naja jetzt gibt es neue Fehler:
Code:
  multiple definition of `TiXmlNode::FirstChildElement()' 
  first defined here 
  [Linker error] undefined reference to `TiXmlString::nullrep_' 
  ld returned 1 exit status

Naja immernoch ein Linker error, obwohl ich das nun eingebunden habe....
 
Oh hatte ich überlesen sorry, naja jetzt gibt es neue Fehler:
Code:
  multiple definition of `TiXmlNode::FirstChildElement()' 
  first defined here 
  [Linker error] undefined reference to `TiXmlString::nullrep_' 
  ld returned 1 exit status

Naja immernoch ein Linker error, obwohl ich das nun eingebunden habe....
Kann es sein, das du TinyXml in des Dev-Cpp Projekt eingebunden hast?

Ist das die vollständige Fehlermeldung? In welchen Dateien werden denn die doppelten Definitionen angezeigt?

Gruß
 

Neue Beiträge

Zurück