.net 查询xml文件而不将其加载到内存中?

.net 查询xml文件而不将其加载到内存中?,.net,linq,linq-to-xml,.net,Linq,Linq To Xml,我正在寻找XmlReader以外的东西 我想应用一个查询并只加载所需的数据 实际上,我希望加载尽可能少的xml 也许某种XQuery实用程序/类可以做到这一点。您可以将XmlReader与LINQtoXML混合使用,以充分利用这两个方面。诀窍是使用LINQtoXML将内部节点加载到内存中 例如,假设您有一个具有以下结构的XML文件: <log> <logentry id="1"> <date>...</date> <sou

我正在寻找XmlReader以外的东西

我想应用一个查询并只加载所需的数据

实际上,我希望加载尽可能少的xml


也许某种XQuery实用程序/类可以做到这一点。

您可以将XmlReader与LINQtoXML混合使用,以充分利用这两个方面。诀窍是使用LINQtoXML将内部节点加载到内存中

例如,假设您有一个具有以下结构的XML文件:

<log>
  <logentry id="1">
    <date>...</date>
    <source>...</source>
    ...
  </logentry>
  ...
</log>

您可以将XmlReader与LINQtoXML混合使用,以充分利用两者的优势。诀窍是使用LINQtoXML将内部节点加载到内存中

例如,假设您有一个具有以下结构的XML文件:

<log>
  <logentry id="1">
    <date>...</date>
    <source>...</source>
    ...
  </logentry>
  ...
</log>

在Urm中,XmlReader不加载它不需要的数据,因为与XmlDocument不同,它在任何时候都不会在内存中保持完整的状态,在读取时,它只会保持足够的状态来知道它在哪里。然而,要真正找到XML的正确部分,您需要读取其中的一部分,否则您可能只需要编写一个脏正则表达式并以这种方式对其进行解析。Urm,XmlReader不加载它不需要的数据,因为与XmlDocument不同,它在任何时候都不会在内存中保持完整的状态,在读取时,它只保持足够的状态以知道它在哪里。然而,要真正找到XML的正确部分,您需要阅读其中的一些内容,否则您可能只需要编写一个脏正则表达式并以这种方式对其进行解析。+1非常酷,产生的值意味着.net将创建一个枚举器,而查询将是惰性的,对吗?因此,如果foo是第二个元素,它将只加载两个元素!?我很想知道吉迪恩问题的答案@乔·阿尔巴哈里:你能回答吗?对。查询是惰性的。+1非常酷,产生的值意味着.net将创建一个枚举器,而查询是惰性的,对吗?因此,如果foo是第二个元素,它将只加载两个元素!?我很想知道吉迪恩问题的答案@乔·阿尔巴哈里:你能回答吗?对。查询是惰性的。
from l in ReadLogEntries (reader)
where l.Source.Contains ("foo")
select new { l.ID, l.Date }