Charger HtmlDocument à partir de MemoryStream

c# html-agility-pack

Question

J'ai un flux utilisé par plusieurs types HtmlDocument , mais Stream.CanSeek est Stream.CanSeek false. Une fois que j'ai lu le flux pour la première fois, je ne peux pas transmettre ce même flux à un autre objet HtmlDocument pour le charger.

Je pensais que je pourrais copier le flux dans un MemoryStream , puis le transmettre à chaque HtmlDcoument mais lorsque j'appelle document.Load(memoryStream) le document.DocumentNode est null.

Ce qui donne?

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

Réponse acceptée

Pourquoi charger plusieurs fois les mêmes données? Chargez votre code HTML une fois dans le document, puis utilisez la même instance de document pour analyser toutes les données requises.

Faites que vos méthodes acceptent le document:

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

Et passez ensuite une instance de document unique partout

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

Ou même envisager de créer une classe où le document sera un champ de classe. Ainsi, vous n'aurez pas besoin de le transmettre à chaque méthode.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi