如何使用HTMLAgilityPack从HTML中删除空白行?

3

我有一个包含大量不必要空白行的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.

https://dev59.com/1Gsz5IYBdhLWcg3wy7LU - Xi Sigma
你想删除空行还是空节点? - Rahul Tripathi
这个有帮助吗:https://dev59.com/AF7Va4cB1Zd3GeqPOfPZ? - Rahul Tripathi
2个回答

5
使用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
                           );
}

在使用SQL查询时,我发现我必须使用空字符串""而不是Environment.NewLine:emptyNode.ParentNode.ReplaceChild(HtmlTextNode.CreateNode(""),emptyNode); - Rocky Raccoon

2
我认为HTMLAgilityPack目前没有原生的解决方案。
对于这种情况,我使用以下正则表达式:
html = Regex.Replace(html, @"( |\t|\r?\n)\1+", "$1");

这将正确保留空格和换行符,同时将多个制表符、换行符和空格压缩成一个。

工作得非常好,解决方案简单易行。感谢Darkseal! - bearaman
我尝试了同样的方法但对我没有起作用,我做了下面的小改动然后就可以工作了。 Regex.Replace(html, @"( |\t|\r|\n)+", string.Empty) - Jenish Zinzuvadiya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接