XML file creation using XDocument in C#
LINQ to XML allows this to be much simpler, through three features:
- You can construct an object without knowing the document it's part of
- You can construct an object and provide the children as arguments
- If an argument is iterable, it will be iterated over
So here you can just do:
void Main(){ List<string> list = new List<string> { "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");}
I've used this code layout deliberately to make the code itself reflect the structure of the document.
If you want an element that contains a text node, you can construct that just by passing in the text as another constructor argument:
// Constructs <element>text within element</element>XElement element = new XElement("element", "text within element");
Using the .Save method means that the output will have a BOM, which not all applications will be happy with.If you do not want a BOM, and if you are not sure then I suggest that you don't, then pass the XDocument through a writer:
using (var writer = new XmlTextWriter(".\\your.xml", new UTF8Encoding(false))){ doc.Save(writer);}