Drucken
Kategorie: devCS
Zugriffe: 10050

XML-Datei einlesen

[  → ]

Über die Klasse XDocument lässt sich eine XML-Datei mit wenig Aufwand einlesen (LINQ to XML).

Beispiel:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;

namespace ReadXMLDoc
{
    class Program
    {
        static void Main(string[] args)
        {
            XDocument xml = XDocument.Load(@"C:\Temp\setting.xml");
            var xmlQuery = from item in xml.Descendants("settings")
                           select item;

            foreach (XElement items in xmlQuery)
            {
                Console.WriteLine(items.Element("Datum").Value);
                Console.WriteLine(items.Element("Wert1").Value);
                Console.WriteLine(items.Element("Wert2").Value);
                Console.WriteLine(items.Element("Wert3").Value);
                Console.WriteLine(items.Element("Wert4").Value);
            }
            Console.ReadLine();
        }
    }
}

dotnetfiddle

setting.xml

<settings>
<Datum>9 Januar</Datum>
<Wert1>eins</Wert1>
<Wert2>zwei</Wert2>
<Wert3>drei</Wert3>
<Wert4>vier</Wert4>
</settings>

Alternativ kann ein XML-Stream verarbeitet werden (z.B. aus einem Webservice)

Es werden die Knoten des XML-Streams durchlaufen und über switch/case einzelne Textelemente gelesen.

Beispiel:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Xml;

namespace WbsRequest
{
 var stream = t.Result;
 using (var reader = new StreamReader(stream))
  {
   ename = "";
   outList = "";
   XmlTextReader xmlreader = null;
   xmlreader = new XmlTextReader(stream);
   i=0;
     while (xmlreader.Read())
    {
    switch (xmlreader.NodeType)
   {
    case XmlNodeType.Element: // Der Knoten ist ein Element.
          ename=xmlreader.Name;
          break;
    case XmlNodeType.Text: //Anzeige des Textes in jedem der Elemente.
         if (ename == "postalcode")
         {
             i = i + 1;
             outList += xmlreader.Value + "?";
             Orte[i] = xmlreader.Value;
         }
        if (ename == "name")
        {
            outList += xmlreader.Value + "|"; //letztes Element
            Orte[i] = xmlreader.Value;
        }
        break;
    case XmlNodeType.EndElement: //Ende der Elementanzeige.
       Console.Write("</" + xmlreader.Name+">");
       break;
   }

 }
}

 Console.ReadLine();
}