C# aus XML-Datei lesen

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Viele Wege führen hier nach Rom. Sogar sehr viele. Hier zwei Ansätze:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Reflection;
using System.Xml.Linq;
using System.Xml.XPath;

namespace ConsoleApplication9
{
    class Program
    {
        static void Main(string[] args)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load("C:\\MyFile.xml");
            XDocument xDoc = XDocument.Parse(doc.InnerXml);
            Rohstoff myRohstoff = (from rs in xDoc.Descendants()
                                   select new Rohstoff
                                   {
                                       holz = int.Parse(rs.Element("holz").Value),
                                       steine = int.Parse(rs.Element("steine").Value),
                                       silber = int.Parse(rs.Element("silber").Value)
                                   }).FirstOrDefault();
            int test = myRohstoff.silber;

            //version zwei
            XmlNode node = doc.SelectSingleNode("rohstoffe");

            foreach (XmlNode nodeWalk in node.ChildNodes)
            {
                if (nodeWalk.Name == "holz")
                {
                    int i4Test = int.Parse(nodeWalk.InnerText);
                }
            }
        }
    }
    class Rohstoff
    { 
        public int holz {get;set;}
        public int steine {get;set;}
        public int silber {get;set;}
    }
}

Hier nochmal mit der verlinkten Variante von Microsoft. Ich hab mich bemüht, alles zu kommentieren, damit du es besser verstehen kannst, was da passiert.

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Reflection;
using System.Xml.Linq;
using System.Xml.XPath;
using System.IO;

namespace ConsoleApplication9
{
    class Program
    {
        static void Main(string[] args)
        {
            //Wir öffnen den Pfad zu unserem XML und erzeugen einen Stream
            StreamReader stream = new StreamReader("C:\\MyFile.xml");
            //Jetzt brauchen wir etwas zum auswerten. XMLTextReader eignet sich gut und bekommt jetzt unseren Stream mit dem XML
            XmlTextReader reader = new XmlTextReader(stream);
            //Jetzt wollen wir den Stream auswerten. Wir machen nen loop drüber
            //Der loop geht nun so lange, bis wir alles gelesen haben und komplett durch sind
            Rohstoff myRohstoff = new Rohstoff();
            while (reader.Read())
            {
                //diese zeile ist nur für dich zur info, damit du mal siehst, was hier alles durchkommt
                //debugge rein und lese es aus
                string test = reader.NodeType.ToString();
                //hier fangen wir alles ab, was uns interessiert
                //sind wir gerade ein element?
                if (reader.NodeType == XmlNodeType.Element)
                {
                    //wir sind ein element. Ist unser Name vielleicht Holz?
                    if (reader.Name == "holz")
                    { 
                        //wir sind das holz, jetzt wollen wir den wert in user object speichern
                        myRohstoff.holz = int.Parse(reader.ReadInnerXml());
                    }
                    else if (reader.Name == "steine")
                    {
                        myRohstoff.steine = int.Parse(reader.ReadInnerXml());
                    }
                    }
                    else if (reader.Name == "silber")
                    {
                        myRohstoff.silber = int.Parse(reader.ReadInnerXml());
                    }
                }
            }
        }
    }
    class Rohstoff
    { 
        public int holz {get;set;}
        public int steine {get;set;}
        public int silber {get;set;}
    }
}

Nimm die Klasse XMLReader: http://support.microsoft.com/kb/301228/de

Ich habe doch geschrieben, dass ich das bei Microsofts Homepage nicht verstehe.

Wie würde das in meinem Bsp aussehen? Ich verwende in XML ja nicht mal Attribute.

0

Was möchtest Du wissen?