1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

[C#] Fragen zu XML-Knoten auslesen.

Dieses Thema im Forum ".NET Datenverwaltung" wurde erstellt von Balaezth, 28. Juli 2015.

  1. Balaezth

    Balaezth Grünschnabel

    Hi, vielleicht könnt ihr mir helfen

    Es geht um folgendes. Ich möchte Daten aus einer XML auslesen. Auf das Design dieser XML habe ich keinen Einfluss da sie aus einer anderen Quelle stammen. Und sieht folgendermaßen aus: (Die XML ist weit aus größer und enthält mehr Informationen aber das ist der Teil um was es geht)

    Code (XML):
    1. <gears>
    2.         <gear>
    3.             <guid>a7759d32-ac8c-48b3-ab24-4d075384ba96</guid>
    4.             <name>Weapon Focus</name>
    5.             <category>Foci</category>
    6.             <capacity />
    7.             <armorcapacity />
    8.             <minrating>0</minrating>
    9.             <maxrating>18</maxrating>
    10.             <rating>6</rating>
    11.             <qty>1</qty>
    12.             <avail>(Rating * 5)R</avail>
    13.             <avail3 />
    14.             <avail6 />
    15.             <avail10 />
    16.             <cost>Rating * 10000</cost>
    17.             <cost3 />
    18.             <cost6 />
    19.             <cost10 />
    20.             <extra>Katana</extra>
    21.             <bonded>True</bonded>
    22.             <equipped>True</equipped>
    23.             <homenode>False</homenode><bonus><selecttext /></bonus><source>SR4</source><page>199</page><response>0</response><firewall>0</firewall><system>0</system><signal>0</signal><gearname /><includedinparent>False</includedinparent><children /><location /><notes /><discountedcost>False</discountedcost>
    24.     </gear>
    25. </gears>
    Geladen wird die XML per:
    Code (C#):
    1. XmlDocument doc = new XmlDocument();
    2.                 doc.Load(DateiPfad);
    3.                 XmlElement root = doc.DocumentElement;
    Ich möchte die Namen (Das was unter Node Name steht in diesem Fall: Weapon Focus) in eine Combobox laden. Das klappt ganz gut mit:

    Code (C#):
    1. XmlNodeList gears = root.SelectNodes("/character/gears/gear");
    2.                 foreach(XmlNode gear in gears)
    3.                 {
    4.                     cbb_Gear.Items.Add(gear["name"].InnerText);
    5.                 }
    6.                 cbb_Gear.SelectedIndex = 0;
    Wenn jetzt die ganzen Gegenstände in der Combobox sind, möchte ich in zwei Labels das Anzeigen was unter <qty> und <extra> steht. Und genau da liegt der Knackpunkt. Das kriege ich nicht hin denn die Gegenstände fangen ja immer mit <gear> und ohne ID an.
    Ich benutze Visual Studio 2013 Express.

    Hoffe ihr versteht was ich meine.

    Gruß
    Balaezth
     
    Zuletzt von einem Moderator bearbeitet: 29. Juli 2015
  2. Cromon

    Cromon Premium-User

    Salut Balaezth

    Grundsätzlich gehören C#-Fragen nicht ins C++- sondern ins .NET-Forum, aber hier eine Möglichkeit:

    Statt nur den Text des Namens in die ComboBox einzufügen definier einfach eine Klasse, die die nötigen Sachen beinhaltet und die Anzeige dann über ToString anbietet.

    Code (C#):
    1. class Gear {
    2.     public string Name { get; private set; }
    3.     public int Quantity { get; private set; }
    4.     public string Extra { get; private set; }
    5.  
    6.     public Gear(XmlNode node) {
    7.            Name = node["name"].InnerText;
    8.            Quantity = int.Parse(node["qty"].InnerText);
    9.            Extra = node["extra"].InnerText;
    10.     }
    11.  
    12.     public override string ToString() {
    13.             return Name;
    14.     }
    15. }
    16.  
    17. // .......
    18. cbb_Gear.Items.Add(new Gear(gear));
    Und bei Selection changed, nachdem du geprüft hast, dass SelectedIndex im gültigen Rahmen ist:
    Code (C#):
    1. var gear = cbb_Gear.Items[cbb_Gear.SelectedIndex] as Gear; // oder cbb_Gear.SelectedItem as Gear
    2. var quantity = gear?.Quantity ?? -1;
    Kannst natürlich auch ne Exception werfen, wenn aus einem Grund das gewählte Item nicht vom Typ Gear ist und daher "as Gear" null zurückgibt.

    Viele Grüsse
    Cromon
     
  3. Balaezth

    Balaezth Grünschnabel

    Hi, vielen Dank für deine Antwort.

    Tut mir leid, wusste nicht so recht wohin mit der Frage aber ich merk es mir :)

    Kann ich dir vielleicht mal meinen Code zeigen, das du mir helfen kannst deine Hilfe zu integrieren?
    Denn ich muss gestehen das ich das noch nicht so wirklich weiß.

    MfG
    Bala
     
Die Seite wird geladen...