Travailler avec XML en C# (.NET) : Guide complet
XML (Extensible Markup Language) reste l'un des formats clés pour le stockage et la transmission de données structurées dans l'écosystème .NET. En C#, plusieurs outils puissants sont disponibles pour travailler avec XML : du classique XmlDocument au moderne XDocument de LINQ to XML, en passant par la sérialisation avancée avec XmlSerializer. Dans cet article, nous allons examiner toutes les approches principales avec des exemples pratiques.
1. Approche classique : XmlDocument
System.Xml.XmlDocument est un modèle DOM (Document Object Model) qui charge l'intégralité du document XML en mémoire sous forme d'arbre de nœuds. Cette approche est familière aux développeurs depuis .NET Framework 1.0.
Chargement et lecture de XML
using System.Xml;
XmlDocument doc = new XmlDocument();doc.Load("books.xml");
// Obtenir l'élément racineXmlElement root = doc.DocumentElement;
// Parcourir tous les nœuds enfantsforeach (XmlNode node in root.ChildNodes){ if (node.Name == "book") { string title = node["title"]?.InnerText; string author = node["author"]?.InnerText; Console.WriteLine($"Livre : {title}, Auteur : {author}"); }}Création et écriture de 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 = "Le Maître et Marguerite";book.AppendChild(title);
newDoc.Save("library.xml");Avantages : Simplicité, support de XPath, contrôle total du DOM.
Inconvénients : Consomme beaucoup de mémoire, pas de support LINQ.
2. Approche moderne : LINQ to XML (XDocument)
Depuis .NET 3.5, il est recommandé d'utiliser l'espace de noms System.Xml.Linq. Les classes XDocument, XElement et XAttribute offrent une API plus légère et fonctionnelle avec une intégration complète à LINQ.
Lecture de XML avec 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})");}Création de XML avec XElement
XDocument xdoc = new XDocument( new XElement("library", new XElement("book", new XElement("title", "Crime et Châtiment"), new XElement("author", "F.M. Dostoïevski"), new XAttribute("id", "1") ) ));
xdoc.Save("library2.xml");Avantages : Syntaxe concise, support LINQ, consommation mémoire réduite.
Inconvénients : Peut être inhabituel pour les développeurs habitués au DOM.
3. Sérialisation d'objets en XML : XmlSerializer
Si vous avez des classes C#, vous pouvez automatiquement les convertir en XML et vice versa à l'aide de System.Xml.Serialization.XmlSerializer.
Exemple de classe pour la sérialisation
[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; }}Sérialisation (objet → XML)
using System.Xml.Serialization;using System.IO;
Book book = new Book { Id = 1, Title = "Guerre et Paix", Author = "L.N. Tolstoï" };
XmlSeria Aussi dans la bibliothèque
Traitement d'images en C# : redimensionnement et recadrage avec la bibliothèque ImageSharp
Sérialisation d'objets en Swift (iOS/macOS) : Codable, JSON et PropertyList
Client OAuth pour Rust : bibliothèque oauth2
Travailler avec S3 et les stockages cloud en Kotlin : AWS SDK et Ktor S3 Client