Arbeiten mit XML in C# (.NET): Vollständiger Leitfaden für Anfänger

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeiten mit XML in C# (.NET): Vollständiger Leitfaden



XML (Extensible Markup Language) bleibt eines der wichtigsten Formate zum Speichern und Übertragen strukturierter Daten im .NET-Ökosystem. In C# stehen mehrere leistungsstarke Werkzeuge für die Arbeit mit XML zur Verfügung: vom klassischen XmlDocument bis zum modernen XDocument aus LINQ to XML und der erweiterten Serialisierung über XmlSerializer. In diesem Artikel werden wir alle grundlegenden Ansätze mit praktischen Beispielen durchgehen.



1. Klassischer Ansatz: XmlDocument



System.Xml.XmlDocument ist ein DOM-Modell (Document Object Model), das das gesamte XML-Dokument als Baum von Knoten in den Speicher lädt. Dieser Ansatz ist Entwicklern seit .NET Framework 1.0 bekannt.



Laden und Lesen von XML



using System.Xml;

XmlDocument doc = new XmlDocument();doc.Load("books.xml");

// Root-Element abrufenXmlElement root = doc.DocumentElement;

// Alle untergeordneten Knoten durchlaufenforeach (XmlNode node in root.ChildNodes){ if (node.Name == "book") { string title = node["title"]?.InnerText; string author = node["author"]?.InnerText; Console.WriteLine($"Buch: {title}, Autor: {author}"); }}


Erstellen und Schreiben von XML



XmlDocument newDoc = new XmlDocument();XmlElement rootElem = newDoc.CreateElement("library");newDoc.AppendChild(rootElem);

XmlElement book = newDoc.CreateElement("book");rootElem.AppendChild(book);

XmlElement title = newDoc.CreateElement("title");title.InnerText = "Der Meister und Margarita";book.AppendChild(title);

newDoc.Save("library.xml");


Vorteile: Einfachheit, XPath-Unterstützung, vollständige Kontrolle über das DOM.
Nachteile: Hoher Speicherverbrauch, keine LINQ-Unterstützung.



2. Moderner Ansatz: LINQ to XML (XDocument)



Seit .NET 3.5 wird die Verwendung des Namespace System.Xml.Linq empfohlen. Die Klassen XDocument, XElement und XAttribute bieten eine leichtere und funktionalere API mit vollständiger LINQ-Integration.



Lesen von XML mit XDocument



using System.Xml.Linq;

XDocument xdoc = XDocument.Load("books.xml");

var books = xdoc.Descendants("book") .Select(b => new { Title = b.Element("title")?.Value, Author = b.Element("author")?.Value, Year = (int?)b.Element("year") });

foreach (var book in books){ Console.WriteLine($"{book.Title} — {book.Author} ({book.Year})");}


Erstellen von XML mit XElement



XDocument xdoc = new XDocument(    new XElement("library",        new XElement("book",            new XElement("title", "Schuld und Sühne"),            new XElement("author", "F.M. Dostojewski"),            new XAttribute("id", "1")        )    ));

xdoc.Save("library2.xml");


Vorteile: Prägnante Syntax, LINQ-Unterstützung, geringerer Speicherverbrauch.
Nachteile: Kann für Entwickler, die an DOM gewöhnt sind, ungewohnt sein.



3. Serialisierung von Objekten in XML: XmlSerializer



Wenn Sie C#-Klassen haben, können Sie diese mit System.Xml.Serialization.XmlSerializer automatisch in XML und zurück konvertieren.



Beispiel einer Klasse für die Serialisierung



[Serializable]public class Book{    [XmlAttribute("id")]    public int Id { get; set; }

[XmlElement("title")] public string Title { get; set; }

[XmlElement("author")] public string Author { get; set; }

[XmlIgnore] public string InternalNote { get; set; }}


Serialisierung (Objekt → XML)



using System.Xml.Serialization;using System.IO;

Book book = new Book { Id = 1, Title = "Krieg und Frieden", Author = "L.N. Tolstoi" };

XmlSeria

Empfehlungen