【问题标题】:Ghosty HtmlAgilityPackGhosty HtmlAgilityPack
【发布时间】:2013-04-13 15:04:56
【问题描述】:

我在这里得到了真正的幽灵效果。 我尝试替换一个 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,就可以成功更改元素。

【问题讨论】:

  • 缺乏详细信息进行故障排除。快照不太清晰。
  • 嗨,大卫,我附上了完整的代码。有什么想法吗??
  • 没有理由。你确定这是因为你的第一次打印吗?
  • 我不知道。如果我评论我的 writeline,只有那一行,可以更改元素。然后,我尝试获取 html 文档的克隆,它得到了正确的结果。

标签: c# html-agility-pack


【解决方案1】:

这是敏捷包中的一个错误。它们缓存 OuterHtml 和 InnerHtml 值。当发生更改时,它们只会使直接父级无效。因为您正在打印根目录,所以它仍然具有旧的缓存值。

http://htmlagilitypack.codeplex.com/workitem/30053

如果您更改为打印出父 div,您应该会看到实际执行了更改:

Console.WriteLine(div.OuterHtml);

【讨论】:

  • 这是真的,但我能做些什么呢?有没有刷新缓存?
  • 您可以尝试修改根 html 节点,也可以编辑敏捷包源以修复错误,如下所示:htmlagilitypack.codeplex.com/workitem/30053
  • 谢谢你,我决定使用旧的 xmldocument htmlagilitypack 的优势是什么,除了它有这么多错误?它的大部分功能都呈现在xmldocument中
  • 您从网络上获取的很少有 HTML 将与 XML 兼容。敏捷包将允许您解析 XmlDocument 无法解析的 HTML。如果您自己生成所有 HTML 并且可以保证它是有效的 XML,那么 XmlDocument 应该没问题。
  • @LouD 我尝试从当前节点修改直到到达顶部节点没有工作。我读了你给的问题。影响低?他(快乐创造者)是巴卡吗?他为什么不修呢?他是坏人吗?
猜你喜欢
  • 1970-01-01
  • 2012-12-10
  • 1970-01-01
  • 2020-09-04
  • 2016-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-30
相关资源
最近更新 更多