在c#中解析xml:将xmlreader和linq结合到xml

问题描述:

我必须在C#中解析大型XML文件。我使用LINQ到XML。我有一个像在c#中解析xml:将xmlreader和linq结合到xml

<root> 
     <node></node> 
     <node></node> 
</root> 

的结构,我想每个节点上使用XmlReader循环和使用LINQ到XML得到每个节点和它的工作?

所以我只有在内存中的当前节点。

+0

什么是您的实际问题吗? – msarchet

+0

@msarchet,我认为这个问题很清楚......他希望在每个''元素上使用Linq到XML,但是使用'XmlReader'来获取这些元素,以避免将整个文档加载到内存中 –

+0

可能的重复[Linq到XML,良品率等](http://*.com/questions/6957483/linq-to-xml-yield-and-others) – casperOne

你可以做这样的事情:

string path = @"E:\tmp\testxml.xml"; 
using (var reader = XmlReader.Create(path)) 
{ 

    bool isOnNode = reader.ReadToDescendant("node"); 
    while (isOnNode) 
    { 
     var element = (XElement)XNode.ReadFrom(reader); 

     // Use element with Linq to XML 
     // ... 

     isOnNode = reader.ReadToNextSibling("node"); 
    } 
} 
+0

它的工作原理,但在某些情况下,我有一个错误:无法投射对象类型'System.Xml.Linq.XText'来键入'System.Xml.Linq.XElement xmlreader。我不知道为什么我会在投射之前进行测试(我测试节点类型)。但我不知道我是否失去了结果 – bobosh

+0

@bobosh,我不确定是什么导致了这个问题......你能发布导致问题发生的XML文档的一个子集吗? –

+0

它始终是相同的模板。在我用xdocument循环节点“节点”之前,我没有问题。在2千条记录上,我失去了三条记录。这个记录没有任何变化 – bobosh