Загрузить HtmlDocument из MemoryStream

c# html-agility-pack

Вопрос

У меня есть поток, который используется несколькими типами HtmlDocument , но Stream.CanSeek имеет значение false, поэтому, как только я прочитаю поток, первый раз, когда я не смогу передать тот же поток другому объекту HtmlDocument чтобы загрузить его.

Я думал, что могу скопировать поток в MemoryStream а затем передать поток памяти в каждый 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
Является ли этот КБ законным? Да, узнайте, почему