Carica HtmlDocument da MemoryStream

c# html-agility-pack

Domanda

Ho uno stream che viene utilizzato da più tipi HtmlDocument , ma Stream.CanSeek è falso, quindi una volta letto il flusso la prima volta non riesco a passare lo stesso flusso a un altro oggetto HtmlDocument per caricarlo.

Stavo pensando di poter copiare lo stream su MemoryStream e poi passare lo stream di memoria su ogni HtmlDcoument ma quando chiamo document.Load(memoryStream) il document.DocumentNode . document.DocumentNode è nullo.

Cosa dà?

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

Risposta accettata

Perché caricare gli stessi dati più volte? Caricare l'html una volta nel documento e quindi utilizzare la stessa istanza del documento per analizzare tutti i dati richiesti.

Fai in modo che i tuoi metodi accettino il documento:

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

E quindi passare l'istanza del documento singolo ovunque

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

O anche prendere in considerazione la creazione di classi in cui il documento sarà un campo di classe. Quindi non avrai bisogno di passarlo a ciascun metodo.



Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché