将XML附加到文件而不从头开始编写它?

时间:2017-08-06 10:58:26

标签: c# .net xml linq file-io

在LINQ-to-XML中附加XML文件的标准方法是读取它,修改内存中的文档,并从头开始编写整个文件。例如:

XDocument doc = XDocument.Load("pathToDoc.xml");
doc.Root.Add(new XElement(namespace + "anotherChild", new XAttribute("child-id", childId)));
doc.Save("pathToDoc.xml");

或者,使用FileStream

using (FileStream fs = new FileStream("pathToDoc.xml", FileMode.Open, FileAccess.ReadWrite)) {
    XDocument doc = XDocument.Load(fs);
    doc.Root.Add(new XElement(namespace + "anotherChild", new XAttribute("child-id", childId)));

    fs.SetLength(0);
    using (var writer = new StreamWriter(fs, new UTF8Encoding(false))) {
        doc.Save(writer);
    }
}

但是,在这两种情况下,现有的XML文档都被加载到内存中,在内存中进行了修改,然后从头开始 写入XML文件。对于小型XML文件,这没关系,但对于具有数百或数千个节点的大型文件,这似乎是一个非常低效的过程。是否有任何方法可以使XDocument(或类似XmlWriter之类的东西)将必要的附加节点附加到现有的XML文档中,而不是从头开始将其删除?

1 个答案:

答案 0 :(得分:1)

这完全取决于您需要添加其他元素的位置。当然,您可以实现删除结束[ [ 0.06240631 0.05016533 0.04039866 0.05481339]
[ 0.05615342 0.0268873 0.02446797 0.02856365]
[ 0.04960712 0.02596745 0.01981818 0.02116911]
[ 0.06562919 0.03579292 0.02395858 0.02714126] ]
标记的内容,写入其他元素,然后再次添加"</root>"。但是,此类代码已针对您的目的进行了高度优化,您可能无法找到适合它的库。

您的代码可能如下所示(快速而脏,没有输入检查,假设"</root>"不存在):

<root/>