阅读非常大的xml文档的一部分

时间:2016-07-20 13:30:36

标签: c# xml linq

我尝试使用linq to xml来读取非常大的xml文件(407 MB):

XDocument xdoc = XDocument.Load(adress);

(地址 - 是文件的路径) 但是由于事实(正如我想的那样)集合变得超过2GB,我失去了内存异常。 Xml文件看起来像这样:

<lemmata>
<lemma id="4694" rev="4694"><l t="аддукторен"><g v="ADJS"/></l><f t="аддукторен"><g v="masc"/><g v="sing"/></f><f t="аддукторна"><g v="femn"/><g v="sing"/></f><f t="аддукторно"><g v="neut"/><g v="sing"/></f><f t="аддукторны"><g v="plur"/></f></lemma>
    <lemma id="4695" rev="4695"><l t="аддукторнее"><g v="COMP"/></l><f t="аддукторнее"></f><f t="аддукторней"><g v="V-ej"/></f><f t="поаддукторнее"><g v="Cmp2"/></f><f t="поаддукторней"><g v="Cmp2"/><g v="V-ej"/></f></lemma>
    <lemma id="4696" rev="4696"><l t="аддукция"><g v="NOUN"/><g v="inan"/><g v="femn"/></l><f t="аддукция"><g v="sing"/><g v="nomn"/></f><f t="аддукции"><g v="sing"/><g v="gent"/></f><f t="аддукции"><g v="sing"/><g v="datv"/></f><f t="аддукцию"><g v="sing"/><g v="accs"/></f><f t="аддукцией"><g v="sing"/><g v="ablt"/></f><f t="аддукциею"><g v="sing"/><g v="ablt"/><g v="V-ey"/></f><f t="аддукции"><g v="sing"/><g v="loct"/></f><f t="аддукции"><g v="plur"/><g v="nomn"/></f><f t="аддукций"><g v="plur"/><g v="gent"/></f><f t="аддукциям"><g v="plur"/><g v="datv"/></f><f t="аддукции"><g v="plur"/><g v="accs"/></f><f t="аддукциями"><g v="plur"/><g v="ablt"/></f><f t="аддукциях"><g v="plur"/><g v="loct"/></f></lemma>
<lemma>.....</lemma>
</lemmata>

所以,有很多元素。我是否有机会只阅读引理元素的一部分,以便元素的集合不超过最大尺寸?或者还有其他方法可以读取此文件? 谢谢

1 个答案:

答案 0 :(得分:2)

看一下XmlReader类。它允许您非常快速地转发元素,以便您可以找到所需的元素,而无需将整个文件拉入内存。