LINQ to XML позволяет сделать это намного проще благодаря трем функциям:
- Вы можете построить объект, не зная документа, частью которого он является
- Вы можете создать объект и предоставить дочерние элементы в качестве аргументов.
- Если аргумент является итеративным, он будет повторяться по
Так что здесь вы можете просто сделать:
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");
}
Я сознательно использовал этот макет кода, чтобы сам код отражал структуру документа.
Если вам нужен элемент, содержащий текстовый узел, вы можете создать его, просто передав текст в качестве другого аргумента конструктора:
// Constructs <element>text within element</element>
XElement element = new XElement("element", "text within element");