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

我以为可以将流复制到MemoryStream,然后将内存流传递给每个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);


甚至考虑在文档将是类字段的地方创建类。因此,您无需将其传递给每个方法。

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

10-10 18:15