Agility HTML-Parser aus Puffer / Stream gelesen

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

Frage

Ich versuche, eine HTML-Seite zu ändern, bevor es in einem Browser mit einem HTTP-Modul rendert. Ich habe versucht, den Agility-HTML-Parser zu implementieren, aber er scheint nur aus Dateien zu lesen.

Wie kann ich es aus einem Puffer / Stream lesen lassen?

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

Akzeptierte Antwort

Sie sollten einen MemoryStream , um die Daten einzulesen:

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

Beliebte Antwort

Tatsächlich ist die HtmlDocument.Load () -Methode überladen und enthält Definitionen zum Laden von Streams: Laden (Stream), Laden (Stream, Boolean), Laden (Stream, Encoding).

Sie finden die Dokumentation im Tab Downloads unter http://htmlagilitypack.codeplex.com/



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum