agility html parser читается из буфера / потока

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

Вопрос

Я пытаюсь изменить HTML-страницу, прежде чем она появится в браузере с помощью HTTP-модуля. Я попытался реализовать анализатор гибкости HTML, но он только кажется, что он читается из файлов.

Как я могу прочитать его из буфера / потока?

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

Принятый ответ

Вы должны иметь возможность использовать MemoryStream для чтения в данных:

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

Популярные ответы

На самом деле метод HtmlDocument.Load () перегружен и содержит определения для загрузки потоков: Load (Stream), Load (Stream, Boolean), Load (Stream, Encoding).

Документацию можно найти на вкладке «Загрузки» по адресу http://htmlagilitypack.codeplex.com/



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему