我有一个大约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添加新行?
答案 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文档
中的示例