Autor Beitrag
syntec
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mo 19.09.11 22:50 
Hallo an alle,

ich handtiere gerade mit dem XmlDocument herum, da ich Daten übersichtlich und einfach abspeichern möchte.
Jedenfalls dachte ich es, dass es einfacher wird.
Gerne möchte ich eine xml Datei auslesen, aber nur von bestimmte Knoten deren Inhalt.
Die Datei sieht von der Struktur folgendermaßen aus:
ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
<Eingänge>
 <Kanal>
  <Name>Eingang 1</Name>
   <Einheit>s</Einheit>
   <Einheit>min</Einheit>
   <Einheit>h</Einheit>
   <Comment>erster Eingang Zeit</Comment>
 </Kanal>
  <Name>Eingang 2</Name>
   <Einheit>mm</Einheit>
   <Einheit>m</Einheit>
   <Einheit>km</Einheit>
   <Comment>zweiter Eingang Volumen</Comment>
 </Kanal>

Jetzt möchte ich in eine Listbox nur die Einheiten der zuvor ausgewählten Eingänge, sprich: <Name>XXX</Name>

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
foreach(XmlNode node in xmlDocument.SelectNodes("//Name"))
{
 if(node.InnerText == strAuswahl)
 {
  listBox.Items.Add()
  ...
 }
}

Damit kann ich zwar auf den passenden Knoten drauf zugreifen, aber wie iterativ die Attribute auslesen. Wird bestimmt nicht umfangreich sein, finde aber leider keinen Ansatz.
Könnt ihr mir da bitte weiterhelfen?

Gruß,
dark-destination1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Di 20.09.11 09:08 
Deine Liste von Einträgen an die listbox Datasource anhängen und listbox.DisplayMember="Name"
syntec Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Di 20.09.11 19:15 
Hallo und danke,

leider hilft mir das nicht weiter, da ich die Einträge (alle "Einheiten") ja aus der xml Datei auslesen möchte und dann in die Liste einfügen möchte.

mfg,
syntec Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Do 22.09.11 20:10 
habe es auch mit ChildNodes versucht... ohne Erfolg.
Auch wie es in www.c-sharp-forum.de...knuepfen_106346.html beschrieben ist, das im Prinzip das beinhaltet was ich haben möchte, bringt mir die Fehlermeldung: "Object reference not set to an instance of an object"

Hat keiner eine Idee?
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Do 22.09.11 20:53 
Hallo,
also so ganz habe ich das Problem nicht verstanden.

Aber ich versuche es trotzdem mal, Dir zu helfen. Mit LinQ To Xml ist die Welt gleich viel einfacher (jedenfalls, wenn man es einmal so halbwegs verstanden hat).
Poste hier einfach mal einen BeispielCode:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
 XDocument doc = XDocument.Parse(Resources.TestXml); //hier aus einer Resource geladen

IEnumerable<XElement> kanalElements = doc.Descendants("Kanal");
//die Liste enthält nach Deinem Beispiel 2 Elemente

//das erste Kanal- Element in der Auflistung
var kanalElement = kanalElements.First();
string kanalName = kanalElement.Element("Name").Value;

//Einheiten-Elemente des ersten Kanals 
IEnumerable<XElement> kanalEinheitenElements = kanalElement.Elements("Einheit");

IEnumerable<string> kanalEinheitenElementsValues = kanalEinheitenElements.Select(x => x.Value);
Und nun muss bloß noch die Bindung bzw. Anzeige an der ComboBox realisiert werden.
LG
syntec Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: So 25.09.11 18:42 
Hallo Marko,

Super, konnte heute deinen Vorschlag testen und hab es nach meinen Ansprüchen ummodeln und verwenden können. Vielen Dank dafür.