2011-08-08 67 views
0

我想對磁盤上已排序的大塊XML文件進行合併排序。沒有機會,他們都適合記憶。我的XML文件由記錄組成。從內存中一次讀取一條記錄中的XML內存

說我有n個XML文件。如果我有足夠的內存,我會將每個文件的全部內容讀入相應的隊列中,每個文件一個隊列,比較每個隊列中每個項目的時間戳,並將具有最小時間戳的那個輸出到另一個文件(合併文件) 。這樣,我將所有小文件合併成一個大文件,所有條目都按時間排序。

問題是我沒有足夠的內存來讀取所有帶.ReadToEnd的XML,以便傳遞給XDocument的.Parse方法。

是否有一種乾淨的方式來讀取足夠的記錄,以保持每個隊列填充下一個傳遞比較其XElement屬性「TimeStamp」,記住它從磁盤讀取哪個XElement?

謝謝。

回答

0

如果您喜歡linq to xml api,this codeplex project可能會滿足您的需求。

+0

一月,謝謝你,那就是我一直在尋找的東西。驚人的代碼這種東西取消了多少代碼。 – Ivan

+0

不客氣。通過點擊左邊的綠色複選標記,可以將此標記爲答案,以幫助我。您也可以爲您以前的問題這樣做。 – 2011-08-10 08:52:29

1

XmlReader是你在找什麼。

表示一種讀取器,它提供對XML數據的快速,非緩存,只進的 訪問。

+0

XMLReader使用什麼方法?據我所知,沒有「ReadOneRecord」方法... – Ivan

1

因此它已經過時了,但這正是SAX解決的問題。它是XML的簡單API,基於回調。您啓動一個讀取操作,並且您的代碼被回調爲每個記錄。這可能是一種選擇,因爲這不需要程序加載整個XML文件(ala XMLDocument)。 Google SAX。