Удалите цепочку повторяющихся элементов с помощью 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>

Популярные ответы

Возможно, вы можете сделать это 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);


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow