analizador html de agilidad leído desde buffer / stream

asp.net c# html html-agility-pack httpmodule

Pregunta

Estoy intentando alterar una página HTML antes de que se muestre en un navegador utilizando un módulo HTTP. Intenté implementar el analizador HTML de agilidad, pero parece que solo se lee de los archivos.

¿Cómo puedo hacer que lea desde un buffer / stream?

public override void Write(byte[] buffer, int offset, int count)
    {
      byte[] data = new byte[count];
      Buffer.BlockCopy(buffer, offset, data, 0, count);
      string html = System.Text.Encoding.Default.GetString(buffer);

      HtmlDocument doc = new HtmlDocument();
      doc.Load(html);
      foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
      {
      HtmlAttribute att = link["href"];
      att.Value = FixLink(att);
      }
    }

Respuesta aceptada

Debería poder usar un MemoryStream para leer los datos:

public override void Write(byte[] buffer, int offset, int count)
{
  var stream = new MemoryStream(buffer, offset, count);

  HtmlDocument doc = new HtmlDocument();
  doc.Load(stream);

  foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
  {
    HtmlAttribute att = link["href"];
    att.Value = FixLink(att);
  }
}

Respuesta popular

En realidad, el método HtmlDocument.Load () está sobrecargado y contiene definiciones para cargar flujos: carga (flujo), carga (flujo, booleano), carga (flujo, codificación).

Puede encontrar la documentación en la pestaña Descargas en http://htmlagilitypack.codeplex.com/



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow