我正在开发一个应用程序,我必须读取一个特定的xml节点('progress'节点,来自几个大的(3meg'ish)文件。
我是通过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秒钟(这里有可怕的无线)。
答案 0 :(得分:1)
如果您想要的只是速度,XmlReader是您的最佳选择。它从头开始一次读取一个节点。最大的限制是您不能后退或使用任何随机访问XML文档。
答案 1 :(得分:0)
是。您可以使用SAX解析器,它与XDocument的工作方式不同。基本上,SAX解析器通过输入XML工作,在回调代码中触发事件。 (你编写这些回调处理程序。)主要优点;