agility html parser letto dal buffer / stream

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

Domanda

Sto provando ad alterare una pagina HTML prima di renderizzare in un browser usando un modulo HTTP. Ho provato ad implementare il parser HTML agility, ma sembra leggere solo da file.

Come posso averlo letto da 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);
      }
    }

Risposta accettata

Dovresti essere in grado di utilizzare un MemoryStream per leggere i dati:

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);
  }
}

Risposta popolare

In realtà il metodo HtmlDocument.Load () è sovraccarico e contiene le definizioni per il caricamento di flussi: Load (Stream), Load (Stream, Boolean), Load (Stream, Encoding).

Puoi trovare la documentazione nella scheda Download all'indirizzo http://htmlagilitypack.codeplex.com/




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é