从datatable将新数据插入xml

时间:2017-08-03 06:57:59

标签: c# .net winforms

我有一个大约900MB的xml文件,我想将datatable中的数据插入到现有的xml中。

有一种方法可以通过使用加载和保存来执行此操作;

XDocument xdoc = XDocument.Load(FilePath);
var root = xdoc.Descendants("DocumentElement").FirstOrDefault()
if (root != null){
    root.Add(new XElement("tag", "value"));
    xdoc.Save(FilePath);
}

但是,它的成本太高了。将900MB xml加载到数据表中可能会导致内存异常,并导致几行新行的性能不佳。

如何向数据表中的大型现有xml添加新行?

1 个答案:

答案 0 :(得分:0)

XDocument(以及XmlDocument)将整个文件加载到内存中。您应该XmlWriter结合使用XNode.WriteTo方法

来自XNode.WriteTo文档的示例:

StringBuilder sb = new StringBuilder();
XmlWriterSettings xws = new XmlWriterSettings();
xws.OmitXmlDeclaration = true;
xws.Indent = true;

using (XmlWriter xw = XmlWriter.Create(sb, xws)) 
{
   XElement child2 = new XElement("AnotherChild",
    new XElement("GrandChild", "different content"));
   child2.WriteTo(xw);
   xw.WriteEndElement();
}

Console.WriteLine(sb.ToString());

您可以以相同的方式阅读大型xml文档,请查看XNode.ReadFrom文档

中的示例