Trabajo con XML en C# (.NET): guía completa para análisis y creación

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): desde lo básico hasta técnicas avanzadas



XML (eXtensible Markup Language) sigue siendo uno de los formatos clave para almacenar y transmitir datos estructurados en el ecosistema .NET. Ya sea que esté creando archivos de configuración, intercambiando datos con servicios web o procesando documentos, las herramientas integradas de C# proporcionan instrumentos flexibles y eficientes para trabajar con XML. En este artículo, analizaremos tres enfoques principales: el clásico XmlDocument, el moderno XDocument (LINQ to XML) y los de flujo XmlReader/XmlWriter.



1. XmlDocument clásico (modelo DOM)



La clase System.Xml.XmlDocument implementa DOM (Document Object Model): carga todo el documento XML en la memoria RAM como un árbol de nodos. Es conveniente para documentos pequeños y medianos cuando se requiere navegación y modificación frecuentes.



Carga y lectura de XML

using System.Xml;

XmlDocument doc = new XmlDocument();doc.Load("books.xml"); // carga desde archivo

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

// Seleccionar todos los elementos bookXmlNodeList books = root.SelectNodes("//book");foreach (XmlNode book in books){ string title = book["title"].InnerText; string author = book["author"].InnerText; Console.WriteLine($"{title} — {author}");}


Creación y guardado 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 = "Guerra y paz";book.AppendChild(title);

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


2. LINQ to XML moderno (XDocument)



El espacio de nombres System.Xml.Linq ofrece una API más concisa y funcional. XDocument y XElement permiten escribir código en estilo LINQ, lo que es especialmente útil para consultas y transformaciones.



Análisis con 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})");}


Creación de XML con constructores

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


Ventajas de XDocument:

  • Soporte de consultas LINQ para filtrar y proyectar datos.
  • Sintaxis más legible para crear elementos mediante constructores anidados.
  • Manejo automático de espacios de nombres mediante XNamespace.


3. Procesamiento por flujo: XmlReader y XmlWriter



Para trabajar con archivos XML grandes (cientos de megabytes o gigabytes), el uso de XmlDocument o XDocument puede provocar desbordamiento de memoria. En estos casos, se utilizan las clases de flujo XmlReader y XmlWriter, que procesan los datos secuencialmente sin cargar todo el documento.



Lectura con XmlReader

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

Recommendations