C# tiene dos APIs para XML. La antigua, XmlDocument, construye el árbol nodo a nodo; la moderna, LINQ to XML, lo escribe en una sola expresión que se parece al XML que va a salir.
También te puede interesar
namespace, sin class Program, sin Main. Los ejemplos usan instrucciones de nivel superior, disponibles desde C# 9: el compilador genera esa estructura por ti. Y desde .NET 10 un archivo suelto se ejecuta directamente con dotnet run archivo.cs, sin crear un proyecto. El código de siempre, con su static void Main, sigue funcionando igual. Tampoco hacen falta los using System;, System.IO y compañía: los proyectos modernos los incluyen de forma implícita.Con XDocument
using System.Xml.Linq;
var doc = new XDocument(
new XDeclaration("1.0", "utf-8", null),
new XElement("empresa",
new XElement("empleado", new XAttribute("id", 1),
new XElement("nombre", "Ana & Cía"),
new XElement("estatus", "activo")),
new XElement("empleado", new XAttribute("id", 2),
new XElement("nombre", "Luis"),
new XElement("estatus", "baja"))));
doc.Save("empresa.xml");<?xml version="1.0" encoding="utf-8"?>
<empresa>
<empleado id="1">
<nombre>Ana & Cía</nombre>
<estatus>activo</estatus>
</empleado>
<empleado id="2">
<nombre>Luis</nombre>
<estatus>baja</estatus>
</empleado>
</empresa>La sangría del código coincide con la del XML, y eso es lo que hace a esta API tan cómoda de leer. Save pone la sangría por su cuenta. Y el & de «Ana & Cía» sale escapado como &: por eso nunca conviene generar XML juntando cadenas, porque el primer dato con un carácter especial estropea el archivo.
Desde una lista
var empleados = new[] { (1, "Ana"), (2, "Luis") };
var raiz = new XElement("empresa",
empleados.Select(e => new XElement("empleado",
new XAttribute("id", e.Item1),
new XElement("nombre", e.Item2))));Como XElement acepta colecciones de hijos, un Select genera un elemento por cada dato. Aquí está la razón del «LINQ» del nombre.
¿Y XmlDocument?
La versión anterior de esta página usaba XmlDocument, con CreateElement, AppendChild y CreateXmlDeclaration uno a uno. Sigue funcionando y lo verás en código antiguo, pero para escribir un XML nuevo hace falta el triple de líneas. Si te encuentras con él, lo explicamos al leer en la página siguiente.
Todo el código se ejecutó con .NET 10 en un contenedor limpio antes de publicar esta página; las salidas están copiadas de esa ejecución.
Muchas gracias, tu ejemplo nos ha dado luz para generar un archivo e intercambiar informacion entre aplicaciones
Saludos
Muchas gracias !!!! Con esto me das buenas ideas para edición de xml en algunos proyectos, saludos.
Tenia dias buscando una rutina para generar archivos en C#. Este codigo viene caido del cielo o de una nube. Voy a implementarlo ya. Vos sos un genio en la programacion.