我有一个由多个HtmlDocument
类型使用的流,但Stream.CanSeek
为false,所以一旦我第一次读取流时,我无法将同一个流传递给另一个HtmlDocument
1}}加载它的对象。
我原以为我可以将流复制到MemoryStream
,然后将内存流传递给每个HtmlDcoument
但是当我调用document.Load(memoryStream)
时,document.DocumentNode
为空。< / p>
是什么给出了?
private HtmlNode getNode(MemoryStream stream) {
var document = new HtmlDocument();
document.Load(stream);
return document.DocumentNode.SelectSingleNode("html/head");
}
答案 0 :(得分:2)
为什么要多次加载相同的数据?将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);
甚至可以考虑创建文档为class field的类。因此,您无需将其传递给每个方法。