c# - 从 MemoryStream 加载 HtmlDocument

标签 c# html-agility-pack

我有一个被多个 HtmlDocument 类型使用的流,但是 Stream.CanSeek 是 false,所以一旦我第一次读取该流,我就无法将相同的流传递给另一个 HtmlDocument 对象来加载它。

我想我可以将流复制到MemoryStream,然后将内存流传递给每个HtmlDcoument,但是当我调用document.Load(memoryStream)时 document.DocumentNode 为空。

什么给出了?

private HtmlNode getNode(MemoryStream stream) {
    var document = new HtmlDocument();
    document.Load(stream);
    return document.DocumentNode.SelectSingleNode("html/head");
}

最佳答案

为什么要多次加载相同的数据?将 html 加载到文档中一次,然后使用相同的文档实例来解析所有必需的数据。

让你的方法接受文档:

private HtmlNode getNode(HtmlDocument document) 
{
    return document.DocumentNode.SelectSingleNode("html/head");
}

然后将单个文档实例传递到各处

var document = new HtmlDocument();
document.Load(stream);
var node1 = getNode(document);
var node2 = getOtherNode(document);

或者甚至考虑创建类,其中文档将是类字段。因此,您不需要将其传递给每个方法。

关于c# - 从 MemoryStream 加载 HtmlDocument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20554670/

相关文章:

c# - IdentityServer4 添加声明到/connect/token

c# - 使用 HtmlAgilityPack 时 Chrome 复制 XPath 返回 null

c# - Microsoft Visual Studio 2017 安装程序项目启动条件检查不适用于 .net 4.7.1

c# - IHostAssemblyStore::ProvideAssembly 导致异常 "The located assembly' 的 list 定义与程序集引用不匹配”

c# - Euler 23 在 C# : 0. 中 2 秒,在 F# : 30. 中 5 秒。为什么?

c# - POST 上的路由约束错误

c# - Agility Pack - 为多个 HTTP 请求维护 'connection'

c# - HTML Agility Pack 是否可以留下未封闭的标签?

c# - HtmlAgilityPack - 找不到文件

XPath:获取id包含特定数量字母的节点