Travailler avec XML en C# (.NET) : guide complet pour l'analyse et la création

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travailler avec XML en C# (.NET) : des bases aux techniques avancées



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. Que vous créiez des fichiers de configuration, échangiez des données avec des services web ou traitiez des documents, les outils intégrés de C# offrent des instruments flexibles et performants pour travailler avec XML. Dans cet article, nous aborderons trois approches principales : le classique XmlDocument, le moderne XDocument (LINQ to XML) et les flux XmlReader/XmlWriter.



1. XmlDocument classique (modèle DOM)



La classe System.Xml.XmlDocument implémente le DOM (Document Object Model) — elle charge l'intégralité du document XML en mémoire sous forme d'arbre de nœuds. C'est pratique pour les documents petits et moyens, lorsque des navigations et modifications fréquentes sont nécessaires.



Chargement et lecture de XML

using System.Xml;

XmlDocument doc = new XmlDocument();doc.Load("books.xml"); // chargement depuis un fichier

// Obtention de l'élément racineXmlElement root = doc.DocumentElement;

// Sélection de tous les éléments bookXmlNodeList books = root.SelectNodes("//book");foreach (XmlNode book in books){ string title = book["title"].InnerText; string author = book["author"].InnerText; Console.WriteLine($"{title} — {author}");}


Création et sauvegarde de XML

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 = "Guerre et Paix";book.AppendChild(title);

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


2. LINQ to XML moderne (XDocument)



L'espace de noms System.Xml.Linq propose une API plus concise et fonctionnelle. XDocument et XElement permettent d'écrire du code dans le style LINQ, ce qui est particulièrement pratique pour les requêtes et les transformations.



Analyse avec 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})");}


Création de XML avec des constructeurs

XDocument doc = new XDocument(    new XElement("library",        new XElement("book",            new XAttribute("id", "1"),            new XElement("title", "Crime et Châtiment"),            new XElement("author", "F.M. Dostoïevski")        )    ));doc.Save("library.xml");


Avantages de XDocument :

  • Prise en charge des requêtes LINQ pour le filtrage et la projection des données.
  • Syntaxe plus lisible pour la création d'éléments via des constructeurs imbriqués.
  • Gestion automatique des espaces de noms avec XNamespace.


3. Traitement par flux : XmlReader et XmlWriter



Pour travailler avec de gros fichiers XML (centaines de mégaoctets ou gigaoctets), l'utilisation de XmlDocument ou XDocument peut entraîner un débordement de mémoire. Dans ces cas, on utilise les classes de flux XmlReader et XmlWriter, qui traitent les données séquentiellement sans charger l'intégralité du document.



Lecture avec XmlReader

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

Recommendations