Cargar HtmlDocument desde MemoryStream

c# html-agility-pack

Pregunta

Tengo un flujo que está siendo utilizado por varios tipos de HtmlDocument , pero Stream.CanSeek es falso, así que una vez que leo el flujo la primera vez no puedo pasar ese mismo flujo a otro objeto HtmlDocument para cargarlo.

Estaba pensando que podría copiar el flujo a un MemoryStream y luego pasar el flujo de memoria a cada HtmlDcoument pero cuando llamo document.Load(memoryStream) el document.DocumentNode es nulo.

¿Lo que da?

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

Respuesta aceptada

¿Por qué cargar los mismos datos varias veces? Cargue su html una vez en el documento y luego use la misma instancia de documento para analizar todos los datos requeridos.

Haz que tus métodos acepten el documento:

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

Y luego pasar la instancia de documento único en todas partes

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

O incluso considerar la creación de clase donde el documento será el campo de clase. Así no necesitarás pasarlo a cada método.




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué