敏捷的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);
}
}
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);
}
}