LINQ如何从大型XML文件中搜索数据?

时间:2010-06-22 11:15:26

标签: c# .net linq

我有一个大约500 MB的xml文件,我使用LINQ和c#来查询该文件,但它很慢,因为它将所有内容加载到内存中。无论如何,我可以查询该文件而不将所有内容加载到内存中吗?

由于

3 个答案:

答案 0 :(得分:2)

This article可以帮助您正常运行。看一下SimpleStreamAxis方法,这对于在大型XML文件中查找节点非常方便。我已经成功地在5GB XML文件上使用了这种方法的变体,而没有将文件加载到内存中。

答案 1 :(得分:0)

不,使用Linq时不可能。 Linq将完整xml的模型加载到内存中,以便您可以使用树结构进行访问。 如果要在不将文件加载到内存的情况下快速访问,可以使用XmlReader类。 这个类为您提供了一个只有快进的xml解析器,它只在内存中有当前节点。

以下是一些帮助:http://support.microsoft.com/kb/307548

修改抱歉,我不知道将xmlreader与linq结合起来是可能的。

答案 2 :(得分:0)

您可以使用MSDN网页上描述的关于XNode.ReadFrom的技术,从XNode生成XElement个IE XmlReader(在他们提供的示例中,XElement s)

请注意,当您从StreamXmlReader中读取{{1}}时,必须同时阅读该元素的所有内容 - 因此您仍需要一些自定义内容IEnumerator逻辑中的逻辑,以确保返回 XElements - 例如,如果您返回根元素,您也可以立即解析整个文档,因为根元素包含几乎无处不在。 XNode.ReadFrom示例也包含这样的逻辑。