Html Agility PackとC#でHTMLソースの空白を削除するにはどうすればいいですか?

c# html html-agility-pack

質問

投稿する前に、私はこのスレッドから解決策を試しました:

マークアップ間で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アジャイルパックを使って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ソースの2つの段落の間に余分な空白を取り除く方法です。

人気のある回答

最初の段落と最後の段落の間のテキストノードを削除します。

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>


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ