Creación de archivos XML con XDocument en C #

Tengo una List “sampleList” que contiene

 Data1 Data2 Data3... 

La estructura del archivo es como

          

Actualmente estoy usando XmlDocument para hacer esto.

Ejemplo:

 List lst; XmlDocument XD = new XmlDocument(); XmlElement root = XD.CreateElement("file"); XmlElement nm = XD.CreateElement("name"); nm.SetAttribute("filename", "Sample"); root.AppendChild(nm); XmlElement date = XD.CreateElement("date"); date.SetAttribute("modified", DateTime.Now.ToString()); root.AppendChild(date); XmlElement info = XD.CreateElement("info"); for (int i = 0; i < lst.Count; i++) { XmlElement da = XD.CreateElement("data"); da.SetAttribute("value",lst[i]); info.AppendChild(da); } root.AppendChild(info); XD.AppendChild(root); XD.Save("Sample.xml"); 

¿Cómo puedo crear la misma estructura XML usando XDocument?

LINQ to XML permite que esto sea mucho más simple, a través de tres características:

  • Puedes construir un objeto sin conocer el documento del que forma parte
  • Puede construir un objeto y proporcionar a los niños como argumentos
  • Si un argumento es iterable, se repetirá

Entonces aquí puedes hacer:

 void Main() { List list = new List { "Data1", "Data2", "Data3" }; XDocument doc = new XDocument( new XElement("file", new XElement("name", new XAttribute("filename", "sample")), new XElement("date", new XAttribute("modified", DateTime.Now)), new XElement("info", list.Select(x => new XElement("data", new XAttribute("value", x))) ) ) ); doc.Save("Sample.xml"); } 

He usado este diseño de código deliberadamente para hacer que el código refleje la estructura del documento.

Si desea un elemento que contenga un nodo de texto, puede construirlo simplemente pasando el texto como otro argumento de constructor:

 // Constructs text within element XElement element = new XElement("element", "text within element");