Arbeiten mit XML in C# (.NET): vollständiger Leitfaden zum Parsen und Erstellen

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): Von den Grundlagen bis zu fortgeschrittenen Techniken



XML (eXtensible Markup Language) bleibt eines der wichtigsten Formate zum Speichern und Übertragen strukturierter Daten im .NET-Ökosystem. Unabhängig davon, ob Sie Konfigurationsdateien erstellen, Daten mit Webdiensten austauschen oder Dokumente verarbeiten, bieten die integrierten C#-Tools flexible und leistungsstarke Werkzeuge für die Arbeit mit XML. In diesem Artikel behandeln wir drei Hauptansätze: das klassische XmlDocument, das moderne XDocument (LINQ to XML) und die Streaming-Klassen XmlReader/XmlWriter.



1. Klassisches XmlDocument (DOM-Modell)



Die Klasse System.Xml.XmlDocument implementiert das DOM (Document Object Model) – sie lädt das gesamte XML-Dokument als Knotenbaum in den Arbeitsspeicher. Dies ist praktisch für kleine und mittlere Dokumente, bei denen häufige Navigation und Änderungen erforderlich sind.



XML laden und lesen

using System.Xml;

XmlDocument doc = new XmlDocument();doc.Load("books.xml"); // Laden aus Datei

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

// Alle book-Elemente auswählenXmlNodeList books = root.SelectNodes("//book");foreach (XmlNode book in books){ string title = book["title"].InnerText; string author = book["author"].InnerText; Console.WriteLine($"{title} — {author}");}


XML erstellen und speichern

XmlDocument doc = new XmlDocument();XmlElement root = doc.CreateElement("library");doc.AppendChild(root);

XmlElement book = doc.CreateElement("book");book.SetAttribute("id", "1");

XmlElement title = doc.CreateElement("title");title.InnerText = "Krieg und Frieden";book.AppendChild(title);

root.AppendChild(book);doc.Save("library.xml");


2. Modernes LINQ to XML (XDocument)



Der Namespace System.Xml.Linq bietet eine prägnantere und funktionalere API. XDocument und XElement ermöglichen das Schreiben von Code im LINQ-Stil, was besonders bei Abfragen und Transformationen praktisch ist.



Parsen mit XDocument

using System.Xml.Linq;

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

var books = doc.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.Year})");}


XML mit Konstruktoren erstellen

XDocument doc = new XDocument(    new XElement("library",        new XElement("book",            new XAttribute("id", "1"),            new XElement("title", "Verbrechen und Strafe"),            new XElement("author", "F.M. Dostojewski")        )    ));doc.Save("library.xml");


Vorteile von XDocument:

  • Unterstützung von LINQ-Abfragen zum Filtern und Projizieren von Daten.
  • Lesbarere Syntax zum Erstellen von Elementen durch verschachtelte Konstruktoren.
  • Automatische Behandlung von Namespaces über XNamespace.


3. Stream-basierte Verarbeitung: XmlReader und XmlWriter



Bei der Arbeit mit großen XML-Dateien (Hunderte Megabyte oder Gigabyte) kann die Verwendung von XmlDocument oder XDocument zu Speicherüberläufen führen. In solchen Fällen werden die Streaming-Klassen XmlReader und XmlWriter verwendet, die Daten sequenziell verarbeiten, ohne das gesamte Dokument zu laden.



Lesen mit XmlReader

using (XmlReader reader = XmlReader.Create("large.xml")){    while (reader.Read())    {        if (reader.NodeType == XmlNodeType.Element && reader.Name == "record")        {            string id = reader.Get                    

Empfehlungen