从MemoryStream加载HtmlDocument

c# html-agility-pack

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

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

是什么赋予了?

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);

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



Related

许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow