2013-12-12 28 views
2

我有一個流被多個HtmlDocument類型使用,但Stream.CanSeek爲false,所以一旦我第一次讀取流時,我無法將同一個流傳遞給另一個HtmlDocument對象來加載它。從MemoryStream中加載HtmlDocument

我想我可以在流內存流複製到MemoryStream,然後傳遞給每HtmlDcoument,但是當我打電話document.Load(memoryStream)document.DocumentNode爲空。

什麼給?

private HtmlNode getNode(MemoryStream stream) { 
    var document = new HtmlDocument(); 
    document.Load(stream); 
    return document.DocumentNode.SelectSingleNode("html/head"); 
} 
+0

提供的答案應該是要走的路,但我對你的問題的猜測是,你需要設置流的位置爲'0',每次你需要再次加載它。 – Silvermind

回答

2

爲什麼要多次載入相同的數據?將您的html加載到文檔中,然後使用相同的文檔實例來分析所有需要的數據。

讓你的方法接受文件:

private HtmlNode getNode(HtmlDocument document) 
{ 
    return document.DocumentNode.SelectSingleNode("html/head"); 
} 

然後通過單一實例文檔中隨處可見

var document = new HtmlDocument(); 
document.Load(stream); 
var node1 = getNode(document); 
var node2 = getOtherNode(document); 

甚至可以考慮創建類,其中的文件將類字段。因此你不需要將它傳遞給每個方法。

+1

不知道爲什麼我沒有想到這一點。 DOH。謝謝你,先生 :) – bflemi3