Как удалить пустые строки из HTML с помощью HTMLAgilityPack?

c# html html-agility-pack

Вопрос

У меня есть HTML-документ, содержащий много ненужных пустых строк, которые я бы хотел удалить. Вот пример HTML:

<html>

<head>


</head>

<body>

<h1>Heading</h1>

<p>Testing

Я пробовал следующий код, но он удалял каждую новую строку, я просто хочу удалить пустые строки.

static string RemoveLineReturns(string html)
    {
        html = html.Replace(Environment.NewLine, "");
        return html;
    }

Любая идея, как это сделать с помощью HTMLAgilityPack? Спасибо, J.

Принятый ответ

Я не думаю, что в настоящее время в HTMLAgilityPack есть собственное решение для этого.

Для таких сценариев я использую следующее Regex:

html = Regex.Replace(html, @"( |\t|\r?\n)\1+", "$1");

Это обеспечивает правильное сохранение пробелов и контуров линий, а также конденсацию нескольких вкладок, новых строк и пробелов в одну.


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

Один из возможных способов использования Html Agility Pack:

var doc = new HtmlDocument();
//TODO: load your HtmlDocument here

//select all empty (containing white-space(s) only) text nodes :
var xpath = "//text()[not(normalize-space())]";
var emptyNodes = doc.DocumentNode.SelectNodes(xpath);

//replace each and all empty text nodes with single new-line text node
foreach (HtmlNode emptyNode in emptyNodes)
{
    emptyNode.ParentNode
             .ReplaceChild(HtmlTextNode.CreateNode(Environment.NewLine) 
                            , emptyNode
                           );
}


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему