我在这里有非常好的效果。 我尝试替换img节点。如果我打印出文档html一次,什么都不会发生。 如果我不打印文档html,可以成功替换img标记。 这真的很奇怪,任何人都可以解释一下吗?
我的HTML代码
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<div id="swap"></div>
</body>
</html>
和我的c#代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HtmlAgilityPack;
using System.IO;
namespace htmlagile
{
class Program
{
static void Main(string[] args)
{
HtmlDocument htmldoc = new HtmlDocument();
string htmlstring;
using (StreamReader sr = new StreamReader("HTMLPage1.html"))
{
htmlstring = sr.ReadToEnd();
}
htmldoc.LoadHtml(htmlstring);
var div = htmldoc.DocumentNode.SelectNodes("//div");
Console.WriteLine(htmldoc.DocumentNode.OuterHtml);
foreach (var item in div)
{
HtmlNode newTag = htmldoc.CreateElement("p");
newTag.SetAttributeValue("id", "change");
item.ParentNode.ReplaceChild(newTag, item);
}
Console.WriteLine(htmldoc.DocumentNode.OuterHtml);
}
}
}
如果我注释掉我的第一个console.WriteLine,则可以成功更改该元素。
答案 0 :(得分:3)
这是敏捷包中的一个错误。它们缓存OuterHtml和InnerHtml值。发生更改时,它们只会使直接父级无效。因为您正在打印根,所以它仍然具有旧的缓存值。
http://htmlagilitypack.codeplex.com/workitem/30053
如果更改为打印父div,您应该看到实际执行了更改:
Console.WriteLine(div.OuterHtml);