【问题标题】:Load HtmlDocument from MemoryStream从 MemoryStream 加载 HtmlDocument
【发布时间】:2013-12-12 21:30:47
【问题描述】:

我有一个流被多个HtmlDocument 类型使用,但Stream.CanSeek 是假的,所以一旦我第一次读取流,我就无法将同一个流传递给另一个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");
}

【问题讨论】:

  • 提供的答案应该是要走的路,但我对你的问题的猜测是,每次你需要再次加载时,你都需要将流的位置设置为0。跨度>

标签: c# html-agility-pack


【解决方案1】:

为什么要多次加载相同的数据?将您的 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);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    • 2013-03-24
    • 2012-01-27
    • 1970-01-01
    相关资源
    最近更新 更多