2013-12-12 3 views
2

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

Я думал, что я мог бы скопировать поток в 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

Смежные вопросы