我正在开发一个应用程序,我必须在其中读取特定的 xml 节点(“进度”节点,来自几个大的(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 会在执行任何其他操作之前将整个文件加载到内存中。但是,我不需要那个!我知道该节点将成为文件中的第一个节点。
是否有任何类型的“搜索”xml 解析器不首先缓存整个文件?
为上述属性解析 10 个文件大约需要 15 秒(这里的无线网络很糟糕)。
最佳答案
如果您只想要速度,XmlReader 是您的最佳选择。它一次读取一个节点,从头开始。最大的限制是您不能向后返回或使用对 XML 文档的任何随机访问。
关于c# - XML 尽可能高效地查找特定元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20149586/