在C#中使用XDocument创buildXML文件

我有一个List<string> “sampleList”其中包含

 Data1 Data2 Data3... 

文件结构就像

 <file> <name filename="sample"/> <date modified =" "/> <info> <data value="Data1"/> <data value="Data2"/> <data value="Data3"/> </info> </file> 

我目前正在使用XmlDocument来做到这一点。

例:

 List<string> 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"); 

我如何使用XDocument创build相同的XML结构?

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