0

我正在尝试使用 htmlagilitypack 在文档中插入新节点。我正在从流中读取文档,插入节点,然后将文档作为 FileContentResult 对象返回:

HtmlDocument ndoc = new HtmlDocument();
ndoc.Load(stream);

HtmlNode usern = HtmlNode.CreateNode("<img .... />");
usern.Attributes.Add("onclick", "javascript:document.location.href='/Home/Index';");
ndoc.DocumentNode.SelectSingleNode("id('main')").AppendChild(usern);

using (MemoryStream ms = new MemoryStream())
{
   ndoc.Save(ms);
   ms.Seek(0, System.IO.SeekOrigin.Begin);
   fileBytes = ms.ToArray();
}

FileContentResult file = File(fileBytes, "text/html");
return file;

问题: 未插入新节点 ( img )。如果我使用此代码,并且我只是从流中读取文档并作为 FileContentResult 返回,那么我的页脚内容就消失了,那么一切都很完美。我想知道这段代码有什么问题或者我做错了什么?

4

3 回答 3

0

我遇到了同样的问题,通过传递克隆对象解决了它。只需修改该行

ndoc.DocumentNode.SelectSingleNode("id('main')").AppendChild(usern);

ndoc.DocumentNode.SelectSingleNode("id('main')").AppendChild(usern.CloneNode(true));
于 2013-03-15T11:34:37.740 回答
0

看看HTML Agility pack 创建新的 HTMLNode

这显示了如何正确创建新节点。以我的经验,他们的代码运行良好。类似于 jQuery 一步一步来。祝你好运!

于 2012-07-31T05:36:17.560 回答
0

尝试改变

HtmlNode usern = HtmlNode.CreateNode("<img .... />");

只是img

HtmlNode usern = HtmlNode.CreateNode("<img></img>");

并添加这个

 ndoc.OptionWriteEmptyNodes = true;
于 2012-07-31T05:39:25.897 回答