MemoryStreamからHtmlDocumentをロードする

c# html-agility-pack

質問

私は複数のHtmlDocument型で使用されているストリームを持っているが、 Stream.CanSeekはfalseなので、初めて同じストリームを別の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);

または、ドキュメントがクラスフィールドになるクラスを作成することも検討してください。したがって、各メソッドに渡す必要はありません。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ