從MemoryStream加載HtmlDocument

c# html-agility-pack

我有一個由多個HtmlDocument類型使用的流,但Stream.CanSeek是假的,所以一旦我第一次讀取流時,我無法將相同的流傳HtmlDocument另一個HtmlDocument對象來加載它。

我想我可以將流複製到MemoryStream然後將內存流傳HtmlDcoument每個HtmlDcoument但是當我調用document.Load(memoryStream)document.DocumentNode為null。

是什麼賦予了?

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

一般承認的答案

為什麼要多次加載相同的數據?將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);

或者甚至考慮創建文檔將成為類字段的類。因此,您不需要將它傳遞給每個方法。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow