我正在尝试在使用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);
}
}
答案 0 :(得分:1)
实际上HtmlDocument.Load()方法被重载并包含加载流的定义:加载(流),加载(流,布尔),加载(流,编码)。
的“下载”标签中找到相关文档答案 1 :(得分:1)
您应该可以使用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);
}
}