使用HTML Agility Pack刪除重複元素鏈

c# html-agility-pack

我正在嘗試刪除我的html文檔中任何重複或更多出現的任何<br>標記。這是我到目前為止提出的(非常愚蠢的代碼):

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 html = @"<div>the first line<br /><br />the next one<br /></div>";
var doc = new HtmlDocument();
doc.LoadHtml(html);

並得到它的結果:

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

它是:

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

熱門答案

也許你可以這樣做htmlsource = htmlSource.Replace("<br /><br />", <br />);

或者類似的東西

    string html = "<br><br><br><br><br>";

    html = html.Replace("<br>", string.Empty);

    html = string.Format("{0}<br />", html);

    html = html.Replace(" ", string.Empty);
    html = html.Replace("\t", string.Empty);



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因