2011-08-11 44 views
2

我必須在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://stackoverflow.com/questions/6957483/linq-to-xml-yield-and-others) – casperOne

回答

2

你可以做這樣的事情:

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