Trabajo con XML en C# (.NET): Guía completa para principiantes

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con XML en C# (.NET): Guía completa



XML (Extensible Markup Language) sigue siendo uno de los formatos clave para almacenar y transmitir datos estructurados en el ecosistema .NET. En C# hay varias herramientas potentes disponibles para trabajar con XML: desde el clásico XmlDocument hasta el moderno XDocument de LINQ to XML y la serialización avanzada a través de XmlSerializer. En este artículo analizaremos todos los enfoques principales con ejemplos prácticos.



1. Enfoque clásico: XmlDocument



System.Xml.XmlDocument es un modelo DOM (Document Object Model) que carga todo el documento XML en memoria como un árbol de nodos. Este enfoque es familiar para los desarrolladores desde los tiempos de .NET Framework 1.0.



Carga y lectura de XML



using System.Xml;

XmlDocument doc = new XmlDocument();doc.Load("books.xml");

// Obtener el elemento raízXmlElement root = doc.DocumentElement;

// Recorrer todos los nodos hijosforeach (XmlNode node in root.ChildNodes){ if (node.Name == "book") { string title = node["title"]?.InnerText; string author = node["author"]?.InnerText; Console.WriteLine($"Libro: {title}, Autor: {author}"); }}


Creación y escritura 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 = "El Maestro y Margarita";book.AppendChild(title);

newDoc.Save("library.xml");


Ventajas: Simplicidad, soporte XPath, control total sobre el DOM.
Desventajas: Consume mucha memoria, no tiene soporte LINQ.



2. Enfoque moderno: LINQ to XML (XDocument)



A partir de .NET 3.5, se recomienda usar el espacio de nombres System.Xml.Linq. Las clases XDocument, XElement y XAttribute proporcionan una API más ligera y funcional con integración completa con LINQ.



Lectura de XML con 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})");}


Creación de XML con XElement



XDocument xdoc = new XDocument(    new XElement("library",        new XElement("book",            new XElement("title", "Crimen y castigo"),            new XElement("author", "F.M. Dostoievski"),            new XAttribute("id", "1")        )    ));

xdoc.Save("library2.xml");


Ventajas: Sintaxis concisa, soporte LINQ, menor consumo de memoria.
Desventajas: Puede resultar poco familiar para desarrolladores acostumbrados al DOM.



3. Serialización de objetos a XML: XmlSerializer



Si tiene clases en C#, puede convertirlas automáticamente a XML y viceversa usando System.Xml.Serialization.XmlSerializer.



Ejemplo de clase para serialización



[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; }}


Serialización (objeto → XML)



using System.Xml.Serialization;using System.IO;

Book book = new Book { Id = 1, Title = "Guerra y paz", Author = "L.N. Tolstói" };

XmlSeria

Recommendations