Entwickler-Ecke

IO, XML und Registry - Linq to XML... bekomme Quary nicht gebacken :D


MarcoG88 - So 13.02.11 14:27
Titel: Linq to XML... bekomme Quary nicht gebacken :D
Hallo an alle die sich etwas mit Linq auskennen.

Ich habe folgendes Problem, ich habe eine XML Datei welche Folgendermaßen aussieht:


XML-Daten
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:
<Equip>
  <Set1>
    <Maske>
      <Hersteller></Hersteller>
      <Bezeichnung></Bezeichnung>
      <Beschreibung></Beschreibung>
      <IMG></IMG>
    </Maske>
    <Hopper>
      <Hersteller />
      <Bezeichnung />
      <Beschreibung />
      <IMG />
    </Hopper>
    <Battlepack>
      <Hersteller />
      <Bezeichnung />
      <Beschreibung />
      <IMG />
    </Battlepack>
  </Set1>
  <Set2>
   <Maske>
      <Hersteller></Hersteller>
      <Bezeichnung></Bezeichnung>
      <Beschreibung></Beschreibung>
      <IMG></IMG>
    </Maske>
    <Hopper>
      <Hersteller />
      <Bezeichnung />
      <Beschreibung />
      <IMG />
    </Hopper>
    <Battlepack>
      <Hersteller />
      <Bezeichnung />
      <Beschreibung />
      <IMG />
    </Battlepack>
  </Set2>
</Equip>


Jetzt möchte ich quasi jedes "Item" in "Set" auslesen.
Was ich mit folgenden Code versucht habe:


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:
//Alle Gears auslesen :o
            XDocument xdocument = XDocument.Load(ProfilePath + "\\" + CurrentUser.Benutzername + "\\Equip\\equip.xml");

            var quary = from ItemX in xdocument.Descendants("Equip")
                        select new Gear
                        {
                            Mask = new Item
                            {
                                Hersteller = ItemX.Element("Maske").Element("Hersteller").Value ?? "",
                                Bezeichnung = ItemX.Element("Maske").Element("Bezeichnung").Value ?? "",
                                Beschreibung = ItemX.Element("Maske").Element("Beschreibung").Value ?? "",
                                ImagePath = ItemX.Element("Maske").Element("IMG").Value ?? "",
                            },
                            Hopper = new Item
                            {
                                Hersteller = ItemX.Element("Hopper").Element("Hersteller").Value ?? "",
                                Bezeichnung = ItemX.Element("Hopper").Element("Bezeichnung").Value ?? "",
                                Beschreibung = ItemX.Element("Hopper").Element("Beschreibung").Value ?? "",
                                ImagePath = ItemX.Element("Hopper").Element("IMG").Value ?? "",
                            },
                            Battlepack = new Item
                            {
                                Hersteller = ItemX.Element("Battlepack").Element("Hersteller").Value ?? "",
                                Bezeichnung = ItemX.Element("Battlepack").Element("Bezeichnung").Value ?? "",
                                Beschreibung = ItemX.Element("Battlepack").Element("Beschreibung").Value ?? "",
                                ImagePath = ItemX.Element("Battlepack").Element("IMG").Value ?? "",
                            },
                        };


Das Problem ist, das ich immer eine NullReferenceExpeption bekomme... und ich weiß nicht warum, da ich ja mit


C#-Quelltext
1:
?? ""                    


schon NULL abfange...

Gear stellt eine Klasse dar welche mehrere Items hat, ein Item hat die Propertys "Hersteller, bezeichnung usw."...


Ich hoffe jemand weiß einen grund warum ich diese Objektverweis dingens bekomme
Gruß
Marco


Moderiert von user profile iconKha: Topic aus C# - Die Sprache verschoben am So 13.02.2011 um 13:37
Moderiert von user profile iconChristian S.: Code- durch XML-Tags ersetzt
Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt


MarcoG88 - So 13.02.11 14:37

Hallo,

hat sich erledigt.
Problem war, das in der Quary vergessen wurde erst nach dem element "Set" zu suchen.
Nach einer kleinen anpassung der XML war das kein problem mehr.

JEder Tag heißt jetzt Set und die Zahl dahinter habe ich als Attribut gemacht


Kha - So 13.02.11 14:45

[OT]"Bekomme Quary nicht gebacken"... wie schmeckt denn ein "Quary" ;) ? [/OT]