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 Auch in der Bibliothek
SMS-Versand mit C# (.NET): API-Bibliotheken und Codebeispiele
Prometheus-Metriken in C# (.NET): Integration und Konfiguration
GraphQL für C# (.NET): Vollständiger Leitfaden zur Bibliothek GraphQL.NET
GORM für Go: Vollständiger Leitfaden mit Beispielen