【发布时间】:2013-11-22 16:20:24
【问题描述】:
我正在开发一个应用程序,我必须从几个大 (3meg'ish) 文件中读取特定的 xml 节点(“进度”节点)。
我是通过TextReader和XDocument来做的,如下图
TextReader reader = null;
reader = new StreamReader(Filename);
XDocument objDoc = XDocument.Load(reader);
var progressElement = objDoc.Root.Element("Progress");
var lastAccessTime = progressElement.Element("LastTimeAccessed").Value;
var user = progressElement.Element(("LastUserAccessed").Value;
var lastOpCode = progressElement.Element("LastOpCodeCompleted").Value;
var step = progressElement.Element("StepsCompleted").Value;
我相信,XDocument 是在执行任何其他操作之前将整个文件加载到内存中。不过,我不需要那个!我知道该节点将成为文件中的第一个节点。
是否有任何类型的'seek' xml 解析器不首先缓存整个文件?
为上述属性解析 10 个文件大约需要 15 秒(这里的无线很糟糕)。
【问题讨论】:
-
XmlReader 可以吗? “没人喜欢 xml” API,但它是流式传输而不是 DOM。
-
我试图避免这种解决方案,但它开始看起来像是唯一的选择。
标签: c# .net xml file-io linq-to-xml