在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文档中,而不是从头开始将其删除?
答案 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/>