如何将HtmlDocument保存到内存中?Html Agility Pack

6

我正在使用HTML Agility Pack来解析HTML文档,对一个节点进行更改,然后保存HTML文档。我想将文档保存到内存中,以便稍后在应用程序中将HTML写出为字符串。我的当前实现始终返回一个字符串 ==“”。在调试时,我可以看到HtmlDocument对象不为空。有人能提供一些见解吗?

我使用HTML Agility Pack解析HTML文档,对节点进行修改,然后保存文档。我希望将文档保存在内存中,以便稍后在应用程序中将其作为字符串输出。但是,我的当前实现总是返回一个空字符串。在调试时,我可以看到HtmlDocument对象不为空。请问是否有人能够提供一些指导或建议?
private string InitializeHtml(HtmlDocument htmlDocument)
    {
        string currentUserName = User.Identity.Name;
        HtmlNode scriptTag = htmlDocument.DocumentNode.SelectSingleNode("//script[@id ='HwInitialize']");
        scriptTag.InnerHtml = 
            string.Format("org.myorg.application = {{}}; org.myorg.application.init ={{uid:\"{0}\", application:\"testPortal\"}};",currentUserName);

        MemoryStream memoryStream = new MemoryStream();
        htmlDocument.Save(memoryStream);
        StreamReader streamReader = new StreamReader(memoryStream);
        return streamReader.ReadToEnd();
    }

3
顺便提一下,如果你只需要 HTML 字符串,使用 StringWriter 会更方便。 - Jeff Mercado
1个回答

9
尝试一下。
memoryStream.Seek(0, System.IO.SeekOrigin.Begin)

在创建StreamReader并调用ReadToEnd()之前,流指针很可能会被Save方法留在流的末尾(最好是组件这样做 - 以防想要将更多数据附加到流中),因此当您调用ReadToEnd时,它已经在末尾,没有任何内容被读取。

啊,是的。我现在明白了,保存操作将流留在了末尾。谢谢! - Nick
我遇到了MemoryStream中数据不完整的问题。为了获取页面的HTML,可以像其他评论中提到的那样,直接将其写入StringWriter中。using (StringWriter sw = new StringWriter()) { doc.DocumentNode.WriteTo(sw); sw.Flush(); return sw.ToString(); } - vivek.m

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接