我正在尝试使用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返回,那么一切都很完美。我想知道这个代码的问题或我做错了什么?
答案 0 :(得分:0)
看看HTML Agility pack create new HTMLNode。
这显示了如何正确创建新节点。根据我的经验,他们的代码工作正常。类似于jQuery一步一步走。祝你好运!
答案 1 :(得分:0)
尝试改变
HtmlNode usern = HtmlNode.CreateNode("<img .... />");
只是img
HtmlNode usern = HtmlNode.CreateNode("<img></img>");
并添加此
ndoc.OptionWriteEmptyNodes = true;
答案 2 :(得分:0)
我遇到了同样的问题,通过传递克隆对象来解决它。 只需修改行
ndoc.DocumentNode.SelectSingleNode("id('main')").AppendChild(usern);
到
ndoc.DocumentNode.SelectSingleNode("id('main')").AppendChild(usern.CloneNode(true));