回答
您可以将XmlReader与LINQ to XML混合以获得两全其美的效果。诀窍是使用LINQ to XML将内部节点加载到内存中。
例如,假设你有一个具有以下结构的XML文件:
<log>
<logentry id="1">
<date>...</date>
<source>...</source>
...
</logentry>
...
</log>
试想一下,有100万个logentry元素,你想找到其中源元素包含特定字符串的元素。首先,写出下面的方法:
Enumerable<LogEntry> ReadLogEntries (XmlReader r)
{
r.ReadStartElement ("log");
while (r.Name == "logentry")
{
XElement logEntry = (XElement) XNode.ReadFrom (r);
yield return new LogEntry
{
ID = (int) logEntry.Attribute ("id"),
Date = (DateTime) logEntry.Element ("date"),
Source = (string) logEntry.Element ("source")
}
}
r.ReadEndElement();
}
class LogEntry
{
public int ID;
public DateTime Date;
public string Source;
}
然后你就可以查询XML文件(不加载所有到内存)如下:
它不from l in ReadLogEntries (reader)
where l.Source.Contains ("foo")
select new { l.ID, l.Date }
+1非常酷,产生值将意味着.net会创建一个枚举器和查询将是懒惰的权利?所以如果foo是第二个元素,它只会加载2个元素!? – gideon 2011-01-11 16:14:53
我很好奇吉迪恩问题的答案。 @Joe Albahari你能回应吗? – Freestyle076 2015-05-19 20:12:15
正确。查询是懒惰的。 – 2015-05-20 02:13:50
- 1. 读取xml文件并将其内容加载到数组中
- 2. 将文本文件加载到内存并分析其内容
- 3. 将XML加载到内存中
- 4. 合并大文件而不将整个文件加载到内存中?
- 5. 如何将XML文件加载到大查询
- 6. 如何读取大型XML文件,而无需将其加载到内存中并使用XElement
- 7. 通过http POST发送os.Stdin而不将文件加载到内存中
- 8. 调整UIImage的大小而不将其完全加载到内存中?
- 9. 我可以加速将xml bz2文件加载到内存中吗?
- 10. 在内存中压缩XML文件并将其上传到azure文件存储
- 11. 将u-Boot加载到内存中而不是闪烁
- 12. 如何读取文件,而不将其加载到内存中,如D中的Delphi TFileStream类?
- 13. 从zip压缩文件中提取压缩文件而不将整个文件加载到内存中
- 14. 将txt的文件加载到Java应用程序中并将其保存到XML文件中
- 15. 复制blob而不将其下载到本地内存
- 16. 将php/mysql查询中的数据添加到XML文件中
- 17. Spring Jaxb2:如何将批处理数据追加到XML文件中而不将它读到内存中?
- 18. 将文件下载到内存中
- 19. 写巨大JsonToken到不同的文件,而无需加载到内存中
- 20. 加载XML文件和加载内容
- 21. 将文本文件加载到Java中的内存
- 22. 将节点追加到XML文件而不先读取文件
- 23. 将XElement附加到xml文件而不保存整个文件。 C#
- 24. 如何直接将xml数据加载到Hive表中,而不使用java将其转换为平面文件
- 25. XML:如何将一个xml文件的内容加载到另一个文件
- 26. 如何知道一个文件中的行数,而不用在JavaScript中将内容加载到内存中?
- 27. 是否可以在Rails/ActiveRecord中运行find_by_sql查询而不将所有结果加载到内存中?
- 28. “打开文件”是否意味着将其完全加载到内存中?
- 29. Python从API加载CSV文件并将其迭代到内存中
- 30. 将XML文件加载到SQL Azure
URM,XMLReader不能加载数据需要,在某种意义上说,与XmlDocument不同,它在任何时候都不会在内存中保持完整状态,在读取它时只会保持足够的状态以知道它在哪里。但是要真正找到XML的正确部分,您需要阅读其中的一部分,否则,您可能只需编写一个肮脏的正则表达式并对其进行解析即可。 – tyranid 2010-09-28 22:14:50