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?


  • Administrator



  • 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);            
                }
    

Log in to reply