Как удалить пробелы в HTML-источнике с помощью Html Agility Pack и C #

c# html html-agility-pack

Вопрос

Перед публикацией я попробовал решение из этой темы:

C # - Удалить пробелы в HTML-источнике между разметками?

Вот фрагмент HTML, с которым я работаю:

<p>This is my text</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>This is next text</p>

Я использую HTML Agility Pack для очистки HTML:

HtmlDocument doc = new HtmlDocument();
doc.Load(htmlLocation);
foreach (var item in doc.DocumentNode.Descendants("p").ToList())
{
    if (item.InnerHtml == "&nbsp;")
    {
        item.Remove();
    }
}

Вывод кода выше

<p>This is my text</p>





<p>This is next text</p>

Поэтому моя проблема заключается в том, как удалить лишние пробелы между двумя абзацами в источнике HTML.

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

Удалите текстовые узлы между первым и последним абзацами:

HTML:

var html = @"
<p>This is my text</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>This is next text</p>";

Разберите его:

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
var paragraphs = doc.DocumentNode.Descendants("p").ToList();
foreach (var item in paragraphs)
{
    if (item.InnerHtml == "&nbsp;") item.Remove();
}
var followingText = paragraphs[0]
    .SelectNodes(".//following-sibling::text()")
    .ToList();
foreach (var text in followingText) 
{
    text.Remove();
}

Результат:

<p>This is my text</p><p>This is next text</p>

Если вы хотите сохранить разрыв строки между абзацами, используйте цикл for и вызовите Remove() для всех, кроме последнего текстового узла.

for (int i = 0; i < followingText.Count - 1; ++i)
{
    followingText[i].Remove();
}

Результат:

<p>This is my text</p>
<p>This is next text</p>


Related

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