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 Auch in der Bibliothek
Spring Boot für Java: Vollständiger Leitfaden mit Beispielen
JSON-Verarbeitung in C# (.NET): Vollständige Anleitung mit Beispielen
PHP-CS-Fixer für PHP: Komplettguide mit Beispielen
Logging in Go: Überblick über die Standardbibliothek log und Alternativen