Wie entferne ich Whitespace in HTML Source mit Html Agility Pack und C #

c# html html-agility-pack

Frage

Vor dem Posten habe ich die Lösung aus diesem Thread versucht:

C # - Leerzeichen in HTML-Quellen zwischen Markups entfernen?

Hier ist ein Ausschnitt des HTML, mit dem ich arbeite:

<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>

Ich verwende HTML Agility Pack, um den HTML-Code zu bereinigen:

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

Die Ausgabe des obigen Codes ist

<p>This is my text</p>





<p>This is next text</p>

Also mein Problem ist, wie entferne ich die zusätzlichen Leerzeichen zwischen den beiden Absätzen in der HTML-Quelle.

Beliebte Antwort

Entfernen Sie die Textknoten zwischen dem ersten und dem letzten Absatz:

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>";

Parsen Sie es:

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();
}

Ergebnis:

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

Wenn Sie den Zeilenumbruch zwischen den Absätzen Remove() möchten, verwenden Sie eine for Schleife und rufen Sie Remove() auf allen außer dem letzten Textknoten auf.

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

Ergebnis:

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


Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow