在c#中的html文档中插入新节点

时间:2012-07-31 05:27:10

标签: c# html-agility-pack

我正在尝试使用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返回,那么一切都很完美。我想知道这个代码的问题或我做错了什么?

3 个答案:

答案 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));