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

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# se proporcionan varias bibliotecas y enfoques potentes para trabajar con XML, desde el clásico XmlDocument hasta el moderno LINQ to XML. En este artículo analizaremos las herramientas principales, sus características y proporcionaremos ejemplos prácticos para tareas reales.



1. Bibliotecas principales para trabajar con XML en .NET



La plataforma .NET ofrece a los desarrolladores varias API para procesar XML:



  • System.Xml (XmlDocument, XmlReader, XmlWriter) — el enfoque clásico DOM (Document Object Model). Permite cargar todo el documento XML en memoria y trabajar con él como un árbol de nodos.
  • LINQ to XML (XDocument, XElement, XAttribute) — una API moderna, más ligera y conveniente, integrada con LINQ. Se recomienda para la mayoría de los proyectos nuevos.
  • XmlSerializer — para la serialización y deserialización automática de objetos C# a XML y viceversa.
  • XPath (SelectSingleNode, SelectNodes) — lenguaje de consultas para navegar por documentos XML. Es compatible tanto con XmlDocument como con XDocument (a través de extensiones).


2. LINQ to XML: enfoque moderno



La biblioteca System.Xml.Linq (LINQ to XML) es la opción preferida para trabajar con XML en C#. Ofrece una sintaxis limpia, carga ligera y soporte para consultas LINQ.



Creación de un documento 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", "Guerra y Paz"), new XElement("author", "León Tolstói"), new XElement("price", 599.99m) ), new XElement("book", new XAttribute("id", "2"), new XElement("title", "Crimen y Castigo"), new XElement("author", "Fiódor Dostoyevski"), new XElement("price", 450.00m) ) ));

doc.Save("books.xml");


Carga y lectura de XML

XDocument loadedDoc = XDocument.Load("books.xml");

// Obtener todos los librosvar 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($"Libro #{id}: {title} — {author}");}


Consultas con LINQ

// Seleccionar libros con precio mayor a 500 rublosvar 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} rub.");}


3. XmlDocument clásico



Si trabaja con código heredado o necesita un control total sobre el DOM, use XmlDocument del espacio de nombres System.Xml.



Carga y navegación

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


Agregar un nuevo nodo

XmlNode newBook = xmlDoc.Cre                    

Recommendations