# Daten aus XML auslesen und in Array speichern



## LJay_Marquez (10. August 2011)

Hallo Zusammen

Ich bin Neuling im C++ programmieren. Ich habe die Aufgabe, Daten aus einem XML File in Variablen (oder Strukturen, bzw. Arrays) zu speichern. Das XML File liegt auf meinem Server: http://www.ljay.ch/xml/users.xml

Ich möchte direkt mit meinem Programm auf diesen Link zugreifen und die Daten auswerten...

XML File:


```
<?xml version='1.0'?>
  <Users>
     <User ID="1">
        <Name>Hans Wurst</Name>
        <Adresse>Freiluftstrasse</Adresse>
     </User>
     <User ID="2">
        <Name>Peter Muster</Name>
        <Adresse>Hofstrasse</Adresse>
     </User>
  </Users>
```

Nun möchte ich die zur User ID Dazugehörigen Daten, nämlich Name und Adresse in eine Struktur einlesen, so dass ich später jeder User mit Namen und Adresse verwenden kann. Jedoch habe ich keine Ahnung wie?
Oder ist es besser, die Daten in ein Array einzulesen?

Ich hoffe ihr könnt mir da helfen, ich bin am verzweifeln...

Grüsse LJay


----------



## ComFreek (10. August 2011)

Kannst du dich denn mit C++ aus? Ein bisschen, wie du sagtest.

Um die Inhalte einer XML-Datei auszulesen, brauchst du erstmal einen Parser.
Diesen kannst du entweder selbst programmieren oder einen anderen benutzen (Google-Suche).


----------



## sheel (10. August 2011)

LJay_Marquez hat gesagt.:


> Nun möchte ich die zur User ID Dazugehörigen Daten, nämlich Name und Adresse in eine Struktur einlesen, so dass ich später jeder User mit Namen und Adresse verwenden kann. Jedoch habe ich keine Ahnung wie?
> Oder ist es besser, die Daten in ein Array einzulesen?


Beides. Ein Array aus structs. Das schließt sich gegenseitig nicht aus.

Bevor du die Datei aber mit einem Parser etc. verarbeitest musst du sie einmal vom Server holen.
Da es HTTP ist: http://msdn.microsoft.com/en-us/library/aa385473(v=vs.85).aspx
hat einige HTTP...-Funktionen und Beispiele dazu

Gruß


----------



## LJay_Marquez (10. August 2011)

Danke für die schnellen Antworten.

Dass ich einen Parser brauche weiss ich, nur wie kann ich den programmieren?
Ich habe nur sehr wenig Programmier Erfahrung was dies betrifft.
Könntet ihr mir mal ein Beispiel schreiben?
Ich weiss weder wie einen Parser programmieren, noch wie ich die Daten vom XML in meine Arrays bringen soll...

z.B. Das Array User1 enthält die Daten von User ID 1, also Hans und Freiluftstrasse, welche vom XML eingelesen wurden... etc...


----------



## sheel (10. August 2011)

Pack besser die ID mit in die struct.
Sie muss ja nicht immer fortlaufend sein.

```
struct user
{
    int id;
    char name[60];
    cha Adresse[100];
};
```
und aus dem dann ein Array.

Schau dir dazu auch noch gleich die dynamische Speicherreservierung mit new/delete oder malloc/free an.

Wie du die Daten in ein Array bekommst: Hast du dich entschieden, ob du einen fertigen XML-Parser verwendest (und lernen musst, mit dem umzugehen) oder das Auslesen selbst programmierst?


----------



## LJay_Marquez (10. August 2011)

Was wäre denn einfacher? Ich habe mir bereits TinyXML angeschaut, jedoch scheint mir das etwas kompliziert zu sein.. Wie sieht es denn aus, wie schreibe ich selber einen XML Parser?

Wie gesagt, ich bin nicht sehr erfahren mit C++


----------



## sheel (10. August 2011)

Ich würde ja sagen, schreib selber einen.
Aber auf meine Meinung darfst du da nicht zählen, das sag ich nämlich immer...
(mir machen solche Aufgaben richtig viel Spaß )

TinyXML ist doch gar nicht so kompliziert
http://www.grinninglizard.com/tinyxmldocs/classTiXmlDocument.html
Zuerst machst du eine TiXMLDocument-Variable.
Mit LoadFile lädst du die Datei.
Mit RootElement bekommst du dann "das Dokument" raus.

Die direkten Childs von dem gehst du durch und schaust, wo "Users" ist
Die Childs von dem sind die einzelnen User.
Die ID ist das erste und einzige Attribut davon.
...

Gruß


----------



## ComFreek (11. August 2011)

sheel hat gesagt.:


> Ich würde ja sagen, schreib selber einen.
> Aber auf meine Meinung darfst du da nicht zählen, das sag ich nämlich immer...
> (mir machen solche Aufgaben richtig viel Spaß )


Ich würde für Anfänger vor allem bestehende Bibliotheken empfehlen.

Klar wenn man selbst programmiert lernt man was, aber oft vergeht einem die Lust das Rad neu zu erfinden


----------

