Entwickler-Ecke

IO, XML und Registry - XML Dokument einlesen


Xardas008 - Fr 15.10.10 16:17
Titel: XML Dokument einlesen
Hi,

ich habe eine XML-Datei mit folgendem Aufbau:

XML-Daten
1:
2:
3:
4:
5:
<jobs>
<beruf name="xy">
<auftrag></auftrag>
</beruf>
</jobs>


Jetzt habe ich folgendes Problem, solange ich nur einen Bereich für Beruf habe läuft mein Programm super, aber sobald ich mehr als einen habe nicht mehr.

Folgenden Code habe ich aktuell:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
while (reader.ReadToFollowing("beruf"))
            {
                if (reader.NodeType == XmlNodeType.Element && reader.Name == "beruf")
                {
                    String attr = "";
                    jobs = null;
                    for (int i = 0; i < reader.AttributeCount; i++)
                    {
                        attr = reader.GetAttribute(i);
                    }
                    if (attr.Equals("Ruestungsschmied")){
                        jobs = new JobListRuestungsschmied();
                    }
                    if (attr.Equals("Alchemie"))
                    {
                        jobs = new JobListAlchemie();
                    }
                    if (attr.Equals("Waffenschied")){
                        jobs = new JobListWaffenschmied();
                    }
                    if(attr.Equals("Koch")){
                        jobs = new JobListKoch();
                    }
                    if (attr.Equals("Schneider")){
                        jobs = new JobListSchneider();
                    }
                    if (attr.Equals("Handwerk")){
                        jobs = new JobListHandwerk();
                    }

                    while (reader.ReadToFollowing("auftrag"))
                    {
                        Rezept rez = new Rezept();
                        if (reader.HasAttributes)
                        {
                            for (int i = 0; i < reader.AttributeCount; i++)
                            {
                                if (i == 0)
                                {
                                    lvl = Convert.ToInt32(reader.GetAttribute(i));
                                }
                            }
                        }
                        while(reader.ReadToDescendant("zutat")){
                            if(reader.HasAttributes){
                                for (int i = 0; i < reader.AttributeCount; i++)
                                {
                                    if (i == 0)
                                    {
                                        mats = material.getMaterial(reader.GetAttribute(i));
                                    }
                                    else
                                    {
                                        anz = Convert.ToInt32(reader.GetAttribute(i));
                                    }
                                }
                                rez.add(mats, anz);
                            }
                        }
                        jobs.Add(lvl, rez);

                    }
                }


Hat wer ne Idee, was ich falsch mache?


danielf - Fr 15.10.10 16:21

Hallo,

ich habe mir deinen Code nicht weiter angeschaut. Ich gebe dir den Tipp für Xml-Dateien die kleiner als der "verfügbare" Hauptspeicher sind XDocument/XElement zu verwenden. Damit kannst du die Vorteile von Xml verwenden!

Gruß