敏捷html解析器從緩衝區/流中讀取

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

我試圖在使用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);
      }
    }

一般承認的答案

您應該能夠使用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()方法被重載並包含加載流的定義:加載(流),加載(流,布爾),加載(流,編碼)。

您可以在http://htmlagilitypack.codeplex.com/的“下載”選項卡中找到相關文檔。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因