Auslesen XML Datei
-
Hallo,
ich möchte mit hilfe von C# eine XML Datei auslesen. Im großen und ganzen klappt das auch soweit.
<data> <name>Testname</name> <id>123123</id> <zeit>09:30</zeit> <item> <name>Item1</name> <regnr>xx504</regnr> <activ>1</active> </item> <item> <name>Item1</name> <regnr>xx504</regnr> <activ>1</active> </item> </data>
Ich kann alle Felder soweit auslesen, bis auf die Felder <item>. An dieser stelle scheiter ich, da die Anzahl der Items unterschiedlich ist und ich nicht bestimmt bekomme, wieviele Items ich habe.
Mein Codeansatz ist folgender:
XmlTextReader doc2 = new XmlTextReader(@"C:\\test.xml"); doc2.Read(); doc2.ReadStartElement("data"); doc2.ReadStartElement("name"); name = doc2.ReadString(); ...
was muss ich machen, damit ich bestimmen kann wieviele Items ich habe?
mfg
Hans
-
Also im System.Xml.Linq würde man es so lösen:
XDocument doc = XDocument.Load(@"C:\test.xml"); int count = (from item in doc.Descendants("data").Descendants("item") select item).Count();
Vorausgesetzt durch sorgst erstmal dafür das das XML gültig ist.
-
Danke für die schnelle Antwort.
Wie würde jetzt eine normale Abfrage meiner restlichen Daten, zum Beispiel <zeit> aussehen, damit ich das ganze auf eine Methode umstelle?
-
Dieses Wissen kannst du dir sehr einfach selber zulegen:
http://msdn.microsoft.com/en-us/library/system.xml.linq.xelement.aspx
http://msdn.microsoft.com/en-us/library/system.xml.linq.xelement_members.aspxGrüssli
-
Da hat Dravere natürlich recht. Noch als Startkapital:
XDocument doc = XDocument.Load(@"C:\test.xml"); var name = (from n in doc.Descendants("data").Descendants("name") select n.Value).First(); var id = (from n in doc.Descendants("data").Descendants("id") select n.Value).First(); var zeit = (from n in doc.Descendants("data").Descendants("zeit") select n.Value).First(); Console.WriteLine("Name: " + name); Console.WriteLine("Id : " + id); Console.WriteLine("Zeit: " + zeit); var items = from item in doc.Descendants("data").Descendants("item") select item; foreach (var entry in items) { Console.WriteLine("Item"); Console.WriteLine("Name " + entry.Element("name").Value); Console.WriteLine("Regnr " + entry.Element("regnr").Value); Console.WriteLine("Active " + entry.Element("active").Value); }