Come rimuovo lo spazio bianco in HTML Source con Html Agility Pack e C #

c# html html-agility-pack

Domanda

Prima di pubblicare ho provato la soluzione da questo thread:

C #: rimuovi gli spazi nel codice sorgente HTML tra i markup?

Ecco un frammento dell'HTML con cui sto lavorando:

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

Sto usando HTML Agility Pack per ripulire l'HTML:

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

L'output del codice sopra è

<p>This is my text</p>





<p>This is next text</p>

Quindi il mio problema è come rimuovere gli spazi bianchi aggiuntivi tra i due paragrafi nel codice sorgente HTML.

Risposta popolare

Rimuovere i nodi di testo tra il primo e l'ultimo paragrafo:

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

Analizzalo:

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

Risultato:

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

Se si desidera mantenere l'interruzione di riga tra i paragrafi, utilizzare un ciclo for e chiamare Remove() su tutti tranne l' ultimo nodo di testo.

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

Risultato:

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


Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow