【发布时间】:2016-03-13 17:52:51
【问题描述】:
我一直在寻找更新文件中 xml 的最佳方法。我刚刚切换到使用 XmlReader(来自 XDocument 方法)以提高速度(不必读取内存中的整个文件)。
我的 XmlReader 方法运行良好,当我需要读取一个值时,它会打开 xml,开始读取并且只读取到所需的节点,然后关闭所有内容。它非常快速有效。
现在我已经完成了这项工作,我想创建一个更新已经存在的 xml 的方法。我想保持相同的想法,只在内存中读取需要的内容。所以想法是,阅读直到我正在更改的节点,然后使用编写器更新该值。
我看到的所有东西都有一个 XmlReader 读取,而使用一个 XmlWriter 写入所有东西。如果我这样做了,我会假设我必须让它像 XDocument 那样运行整个文件。以answer 为例。
是否有可能只使用阅读器并阅读到我正在尝试编辑的节点然后更改 innerxml 或其他东西?
在文件中更新 XML 的最快和最有效的方法是什么?
- 我只想将我正在尝试编辑的内容读入内存,而不是 整个文件。
- 我还想说明不支持的节点 存在(需要添加)。
【问题讨论】:
-
您是在问如何就地更新 XML 文件吗?因为 XML 不是为此而设计的。或者您是在问如何通过修改旧文件而不将整个旧文件读入内存来创建新文件?如果是后者,见blogs.msdn.com/b/mfussell/archive/2005/02/12/371546.aspx
-
确实我在问“如何就地更新它”。那不可能吗?如果我有一个巨大的 xml 文件,并且我只想更新加载整个 XML 文件的第一个节点,那将需要很长时间。我想避免这种情况。至于你的第二个问题,我引用的答案就是……
-
并非如此,请参阅Write to existing xml file without replacing it's contents (XmlWriter):XML 文件只是连续的文本文件。它们不是数据库或随机访问文件。没有办法只写到它们中间。 我能想到的就是像stackoverflow.com/questions/10252974/… 那样操作底层流
-
我喜欢结合使用 XmlReader 和 Linq。请参阅我在以下帖子中的回答:stackoverflow.com/questions/35736230/…。获得 XmlElement 后,使用 Linq 方法很容易更新。
-
@jdweng 介意在这里提交答案吗?我在您引用的那个答案中看到的是(1)不写入 xml 文档(这是我的问题的全部内容)和(2)我的问题明确表示不要使用 XDocument(读取整个 xml 文件)做。但我欢迎一个我可能能够接受的答案。 ;) 谢谢