Laden Sie HtmlDocument aus MemoryStream

c# html-agility-pack

Frage

Ich habe einen Stream, der von mehreren HtmlDocument Typen verwendet wird, aber Stream.CanSeek ist false. Stream.CanSeek ich den Stream zum ersten Mal lese, kann ich den Stream nicht mehr an ein anderes HtmlDocument Objekt übergeben, um ihn zu laden.

Ich dachte, ich könnte den Stream in einen MemoryStream kopieren und dann den Speicher-Stream zu jedem HtmlDcoument aber wenn ich document.Load(memoryStream) der document.DocumentNode null.

Was gibt?

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

Akzeptierte Antwort

Warum dieselben Daten mehrmals laden? Laden Sie Ihren HTML-Code einmal in das Dokument und verwenden Sie dann dieselbe Dokumenteninstanz zum Analysieren aller erforderlichen Daten.

Machen Sie Ihre Methoden akzeptieren Dokument:

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

Übergeben Sie dann die einzelne Dokumentinstanz überall

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

Oder erwägen Sie sogar, eine Klasse zu erstellen, in der das Dokument ein Klassenfeld sein wird. Sie müssen es also nicht an jede Methode weitergeben.



Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow