我有一个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创建相同的XML结构?
答案 0 :(得分:178)
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");
答案 1 :(得分:0)
使用.Save方法意味着输出将具有BOM,并非所有应用程序都会满意。 如果您不想使用BOM表,并且不确定,那么我建议您不要这样做,然后通过编写器传递XDocument:
final_vote