在HTML中合并节点

时间:2017-05-24 02:25:26

标签: c# html html-agility-pack

如果下一个连续标记与第一个标记相同,如何合并标记?

我的HTML中有这个标记

<p>This is a text<b>Focus on the Family Great Stories collection</b><b>—</b> This is a textagain <b>bold</b></p>

这应该是输出

<p>This is a text<b>Focus on the Family Great Stories collection—</b> This is a textagain <b>bold</b></p>

我有这段代码

我的代码需要做什么?

            HtmlDocument doc = new HtmlDocument();
            doc.LoadHtml(html);

            foreach (var item in doc.DocumentNode.Descendants("p").ToList())
            {
                if (item.HasChildNodes)
                {

                    foreach (var ch in item.ChildNodes)
                    {
                        if (ch.Name != "#text")
                        {
                            Console.WriteLine(ch.Name);
                        }
                    }
                }
            }

1 个答案:

答案 0 :(得分:1)

这将让您了解如何执行此操作: 您需要按节点名称分组,并遍历结果。之后,只需将其附加到原始文档。

        HtmlDocument doc = new HtmlDocument();
        doc.LoadHtml("<p><b>Focus on the Family Great Stories collection</b><b>—</b></p>");

        foreach (var item in doc.DocumentNode.Descendants("p").ToList())
        {
            if (item.HasChildNodes)
            {
                var grouped = item.ChildNodes.GroupBy(_ => _.Name);
                HtmlNode newNode = doc.CreateElement(grouped.FirstOrDefault().Key);
                foreach (var bNode in grouped.FirstOrDefault())
                {
                    newNode.InnerHtml += bNode.InnerText;
                }
                item.InnerHtml = newNode.OuterHtml;
            }
        }