在 C# 中使用 XDocument 创建 XML 文件
Posted
技术标签:
【中文标题】在 C# 中使用 XDocument 创建 XML 文件【英文标题】:XML file creation using XDocument in C# 【发布时间】:2011-02-26 06:08:28 【问题描述】:我有一个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 结构?
【问题讨论】:
请贴出你目前写的代码。人们通常不喜欢只为您编写代码。 同意——这实际上在一个语句中非常简单,但是仅仅给你答案并不能帮助你学到很多东西。 【参考方案1】: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");
【讨论】:
注意:如果您有需要“内部文本”的元素,您可以像这样添加它们:new XElement("description","this is the inner text of the description element.");
(类似于添加属性/值对的方式)
非常好的方法。我挣扎了一会儿如何一次添加属性和元素的 linq 表达式。所以如果有人感兴趣,我选择:new XElement("info", new object[] new XAttribute("foo", "great"), new XAttribute("bar", "not so great") .Concat(list.Select(x => new XElement("child", ...))))
加上适当的换行,这看起来还不错。【参考方案2】:
使用 .Save 方法意味着输出将有一个 BOM,并非所有应用程序都会对此感到满意。 如果您不想要 BOM,并且如果您不确定,那么我建议您不要,然后通过编写器传递 XDocument:
using (var writer = new XmlTextWriter(".\\your.xml", new UTF8Encoding(false)))
doc.Save(writer);
【讨论】:
以上是关于在 C# 中使用 XDocument 创建 XML 文件的主要内容,如果未能解决你的问题,请参考以下文章
使用 C# 使用 XDocument 解析 XML [重复]
在 C# 中使用 Saxon-HE 对 XDocument 执行具有给定上下文的 XQuery
当数据集WriteXml()函数生成xml文件时,C#如何使用XDocument类更新xml文件
在 XDocument 中使用 ':' 字符生成 Excel - C#