编程语言
首页 > 编程语言> > c#-使用HTML Agility Pack删除重复元素链

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

作者:互联网

我正在尝试删除任何< br>我的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>

标签:html-agility-pack,c
来源: https://codeday.me/bug/20191201/2078372.html