c# - 使用 HTML Agility Pack 删除重复元素链

标签 c# html-agility-pack

我正在尝试删除我的 html 文档中任何
标签的任何重复或多次出现。这是我到目前为止想出的(非常愚蠢的代码):

HtmlNodeCollection elements = nodeCollection.ElementAt(0)
                             .SelectNodes("//br");

if (elements != null)
{
    foreach (HtmlNode element in elements)
    {
        if (element.Name == "br")
        {
             bool iterate = true;
             while(iterate == true)
             {
                 iterate = removeChainElements(element);
             }
         }
     }
}

private bool removeChainElements(HtmlNode element)
{
    if (element.NextSibling != null && element.NextSibling.Name == "br")
    {
        element.NextSibling.Remove();
    }
    if (element.NextSibling != null && element.NextSibling.Name == "br")
         return true;
    else
         return false;
    }
}

代码确实找到了 br 标签,但它根本没有删除任何元素。

最佳答案

我认为你的解决方案太复杂了,尽管据我所知,这个想法似乎是正确的。

假设,找到所有 <br /> 会更容易首先删除节点,然后删除那些之前的兄弟节点是 <br /> 的节点节点。

让我们从下一个例子开始:

var html = @"<div>the first line<br /><br />the next one<br /></div>";
var doc = new HtmlDocument();
doc.LoadHtml(html);

现在找到<br />节点并删除重复元素链:

var nodes = doc.DocumentNode.SelectNodes("//br").ToArray();
foreach (var node in nodes)
    if (node.PreviousSibling != null && node.PreviousSibling.Name == "br")
        node.Remove();

并得到它的结果:

var output = doc.DocumentNode.OuterHtml;

它是:

<div>the first line<br>the next one<br></div>

关于c# - 使用 HTML Agility Pack 删除重复元素链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11307158/

相关文章:

c# - keydown 卡住计时器 c#

c# - 在 .NET 中使用 RS422 传输数据

c# - 在 XPath 中对结果进行分组

c# - 使用 HTMLAgilityPack 选择所有 <p >'s from a Node' s children

c# - 使用 HtmlAgilityPack 包裹元素?

c# - 在泛型方法中返回特定类型

c# - 谁能解释 VDPROJ 文件的主要特征?

c# - 在 Azure DocumentDB 中使用 MongoDB 和 .NET 驱动程序会引发 MongoCommandException

c# - HtmlAgilityPack : xpath and regex

c# - 为什么这段代码在查找 HTML 元素时比其他代码执行速度快 89%?有什么不同?