在文件中更新 xml 的最佳方法是什么?

What's the best way to update xml in a file?

我一直在寻找在文件中更新 xml 的最佳方法。我刚刚切换到使用 XmlReader(来自 XDocument 方法)来提高速度(不必读取内存中的整个文件)。

我的 XmlReader 方法运行完美,当我需要读取一个值时,它会打开 xml,开始读取并只读取所需的节点,然后关闭所有内容。非常快速有效。

既然我已经完成了这项工作,我想创建一个方法来更新 xml 已经存在的方法。我想保持相同的想法,只在内存中读取需要的内容。所以我的想法是,一直读到我正在更改的节点,然后使用写入器更新该值。

我看到的所有内容都由 XmlReader 读取,而使用 XmlWriter 编写所有内容。如果我这样做,我会假设我必须让它 运行 遍历整个文件,就像 XDocument 所做的那样。例如这个 answer.

是否可以只使用 reader 并读取我要编辑的节点然后更改内部 xml 或其他内容?

在文件中更新 XML 最快最有效的方法是什么?

根据设计,XmlReader 表示文档的 "read-only forward-only" 视图,不能用于更新内容。使用 XmlDocumentXDocumentXElementLoad 方法仍会导致将整个文件读入内存。 (在幕后,XDocumentXElement 仍然使用 XmlReader。)但是,您可以结合使用原始 XmlReaderXElement 一起使用重载Load 方法采用 XmlReader

您没有描述您的 XML 结构,但您想做类似的事情:

var reader = XmlReader.Create(@"file://c:\test.xml");  
var document = XElement.Load(reader);
document.Add(new XElement("branch", "leaves"));
document.Save("Tree.xml");

要查找特定节点(例如,具有特定属性值),您需要执行与此类似的操作:

var node = document.Descendants("branch")
                   .SingleOrDefault(e => (string)e.Attribute("name") == "foo");