Entwickler-Ecke
IO, XML und Registry - XML recursive auslesen in listbox.. mit LinQ
implicit - Fr 11.09.09 09:43
Titel: XML recursive auslesen in listbox.. mit LinQ
Hallo,
Nach langer Zeit benoetige ich mal wieder nen kleinen Denkanstoss :)
Folgender Sachverhalt:
Ich lese eien XML Datei ein und parse mit "Descendants" durch bestimmte nodes und vergleiche die mit einem bestimtmen Wert.
C#-Quelltext
1: 2:
| var SystemHottopics = from HTTopics in XMLhot.Descendants("Server") where HTTopics.Attribute("Typ").Value == inputdata |
nun muss ich die Abfrage mit einem "select" beenden.
C#-Quelltext
1:
| select new { HTT = HTTopics.Element("Hottopics").Element("Topic").Attribute("Description").Value }; |
Danach gebe ich diese daten via ananymous variable and foreach schleife an die listbox.
C#-Quelltext
1: 2: 3:
| foreach (var HTTopics in SystemHottopics) if (!hottopicListbox.Items.Contains(HTTopics.HTT)) hottopicListbox.Items.Add(HTTopics.HTT); |
Leider sehe ich aber nur das erste node - attribut.
Muss ich die abfrage recursen irgendwie oder gibts andere tricks.. ?
statt select new vielleicht irgend ne schleife oder sowas ?
Hier noch nen auszug aus der XML struktur... vielleicht hat ja Kha ne idee.
XML-Daten
1: 2: 3: 4: 5: 6:
| <Server Typ="DL320 G2"> <Hottopics> <Topic Description="Hottopic 1" /> <Topic Description="Hottopic 2" /> </Hottopics> </Server> |
Danke schon mal fuer Tips, Hinweise usw.
Gruss Steffen
Kha - Fr 11.09.09 17:40
implicit hat folgendes geschrieben : |
| vielleicht hat ja Kha ne idee. |
*g*
Gibt es denn zu einer Typenbezeichnung wirklich mehrere Server-Nodes? Wenn nein, spricht nichts gegen Single aus dem letzten Thread, ansonsten:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| IEnumerable<string> topicDescs = from server in XMLHot.Descendants("Server") where server.Attribute("Typ") == inputData from topic in server.Element("Hottopics").Elements("Topic") select topic.Attribute("Description").Value;
foreach (string topicDesc in topicsDescs) ... |
Eine LINQ-Query spart dir hier aber relativ wenig, wenn du also noch etwas unsicher bist, würde ich auf jeden Fall auf if-foreach setzen:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| foreach (XElement server in XMLHot.Descendants("Server")) if (server.Attribute("Typ") == inputData) foreach (topic in server.Element("Hottopics").Elements("Topic")) { var topicDesc = topic.Attribute("Description").Value; ... } |
implicit - Sa 12.09.09 10:12
| Zitat: |
| Gibt es denn zu einer Typenbezeichnung wirklich mehrere Server-Nodes? |
Also es gibt fuer den Server-Node die Typen-Bezeichnung in dem Node Attribute. Von diesen Server nodes gibt es viele aber halt mit verschiedenen Typen-Bezeichnern.
C#-Quelltext
1: 2: 3: 4: 5: 6:
| foreach (XElement server in XMLHot.Descendants("Server")) if (server.Attribute("Typ") == inputData) foreach (topic in server.Element("Hottopics").Elements("Topic")) { var topicDesc = topic.Attribute("Description").Value; ... } |
Aber genau das meine ich mit Denkanstoss :) Du hast immer gute ideen... :) Danke .. ich gehe also einfach mit if-foreach durch die XElemente. Probiere ich gleich mal aus.
Bitte den threat noch nicht schliessen, fals ich noch ne frage zu dem thema habe.. Hatte mir naemlich schon 2 tage Kopfzerbrechen eingehandelt mit irgendwelchen recursiven und dann mit xmlnodeListen und all den *piep*. Hat alles nicht zum gewuenschten ergebniss gefuehrt.
Also danke erstmal :) bis gleich (sozusagen)
gruss Steffen
implicit - Mo 14.09.09 18:26
Hi kha ,,,
danke fuer dein Tip, der hat mich nen ganzes stueck weiter nach vorne gebracht.
Auf dich ist halt verlass :)
Thema kann geschlossen werden...
Gruss Steffen
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!