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 bibliothèques et approches puissantes sont disponibles pour travailler avec XML, allant du classique XmlDocument au moderne LINQ to XML. Dans cet article, nous allons passer en revue les principaux outils, leurs particularités et fournir des exemples pratiques pour des tâches réelles.
1. Bibliothèques principales pour travailler avec XML dans .NET
La plateforme .NET offre aux développeurs plusieurs API pour le traitement du XML :
- System.Xml (XmlDocument, XmlReader, XmlWriter) — l'approche DOM classique (Document Object Model). Permet de charger l'intégralité du document XML en mémoire et de travailler avec comme un arbre de nœuds.
- LINQ to XML (XDocument, XElement, XAttribute) — une API moderne, plus légère et pratique, intégrée à LINQ. Recommandée pour la plupart des nouveaux projets.
- XmlSerializer — pour la sérialisation et la désérialisation automatiques d'objets C# en XML et vice versa.
- XPath (SelectSingleNode, SelectNodes) — un langage de requêtes pour naviguer dans un document XML. Pris en charge à la fois par
XmlDocumentetXDocument(via des extensions).
2. LINQ to XML : une approche moderne
La bibliothèque System.Xml.Linq (LINQ to XML) est le choix privilégié pour travailler avec XML en C#. Elle offre une syntaxe propre, un chargement léger et la prise en charge des requêtes LINQ.
Création d'un document XML
using System.Xml.Linq;
XDocument doc = new XDocument( new XDeclaration("1.0", "utf-8", "yes"), new XElement("books", new XElement("book", new XAttribute("id", "1"), new XElement("title", "Война и мир"), new XElement("author", "Лев Толстой"), new XElement("price", 599.99m) ), new XElement("book", new XAttribute("id", "2"), new XElement("title", "Преступление и наказание"), new XElement("author", "Фёдор Достоевский"), new XElement("price", 450.00m) ) ));
doc.Save("books.xml");Chargement et lecture du XML
XDocument loadedDoc = XDocument.Load("books.xml");
// Récupération de tous les livresvar allBooks = loadedDoc.Descendants("book");
foreach (var book in allBooks){ string id = book.Attribute("id")?.Value; string title = book.Element("title")?.Value; string author = book.Element("author")?.Value; Console.WriteLine($"Livre #{id}: {title} — {author}");}Requêtes avec LINQ
// Sélection des livres coûtant plus de 500 roublesvar expensiveBooks = from book in loadedDoc.Descendants("book") where (decimal)book.Element("price") > 500 select new { Title = (string)book.Element("title"), Price = (decimal)book.Element("price") };
foreach (var b in expensiveBooks){ Console.WriteLine($"{b.Title}: {b.Price} руб.");}3. XmlDocument classique
Si vous travaillez avec du code hérité ou si vous avez besoin d'un contrôle total sur le DOM, utilisez XmlDocument de l'espace de noms System.Xml.
Chargement et navigation
using System.Xml;
XmlDocument xmlDoc = new XmlDocument();xmlDoc.Load("books.xml");
XmlNode root = xmlDoc.DocumentElement;XmlNodeList bookNodes = root.SelectNodes("book");
foreach (XmlNode node in bookNodes){ XmlNode titleNode = node.SelectSingleNode("title"); if (titleNode != null) { Console.WriteLine(titleNode.InnerText); }}Ajout d'un nouveau nœud
XmlNode newBook = xmlDoc.Cre