我有一个被多个 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/