敏捷的HTML解析器从缓冲区/流读取

本文关键字:缓冲区 读取 HTML | 更新日期: 2023-09-27 18:10:19

我试图在使用HTTP模块在浏览器中呈现之前更改HTML页面。我试图实现敏捷的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);
      }
    }

敏捷的HTML解析器从缓冲区/流读取

HtmlDocument.Load()方法实际上是重载的,它包含了加载流的定义:Load(Stream), Load(Stream, Boolean), Load(Stream, Encoding)。

您可以在http://htmlagilitypack.codeplex.com/

的下载选项卡中找到文档。

您应该能够使用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);
  }
}