HTML Agility Pack不更改文本节点的文本

时间:2019-07-29 14:27:56

标签: c# html text replace html-agility-pack

我想在##文档中(但仅在文本节点中)用++替换HTML

我正在使用HTML Agility Pack来操作文档。这是我的代码:

private static void Main(string[] args)
{
    var htmlDoc = new HtmlDocument();
    htmlDoc.LoadHtml("<html><p>This is a test paragraph ##</p><a>Not here ##</a><div><p>Nested paragraph ##</p></div></html>");
    Console.WriteLine(htmlDoc.Text);
    GenerateLinksInHtmlNode(htmlDoc.DocumentNode.ChildNodes);
    Console.WriteLine(htmlDoc.Text);
    Console.ReadKey();
}

private static void GenerateLinksInHtmlNode(HtmlNodeCollection htmlNodeColl)
{
    foreach (var childNode in htmlNodeColl)
    {
        switch (childNode.NodeType)
        {
            case HtmlNodeType.Document:
            case HtmlNodeType.Element:
                GenerateLinksInHtmlNode(childNode.ChildNodes);
                break;
            case HtmlNodeType.Text when childNode.ParentNode.Name == "a":
                continue;
            case HtmlNodeType.Text:
            {
                var txtNode = (HtmlTextNode) childNode;
                txtNode.Text = GenerateLinks(txtNode.Text);
                break;
            }
        }
    }
}

private static string GenerateLinks(string txt)
{
    return Regex.Replace(txt, "##", "++");
}

当我调试它时,我可以看到该文本节点具有应替换的文本。但是在第二个Console.WriteLine()中,文本与第一个日志中的文本相同。

1 个答案:

答案 0 :(得分:1)

加载文档时设置Text属性。之后,它不会改变。参见source

使用InnerHtmlOuterHtml属性查看更改。

Console.WriteLine(htmlDoc.DocumentNode.InnerHtml);