¿Cómo elimino los espacios en blanco en HTML Source con Html Agility Pack y C #?

c# html html-agility-pack

Pregunta

Antes de publicar probé la solución de este hilo:

C # - ¿Eliminar espacios en la fuente HTML entre las marcas?

Aquí hay un fragmento del HTML con el que estoy trabajando:

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

Estoy usando HTML Agility Pack para limpiar el HTML:

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

La salida del código anterior es

<p>This is my text</p>





<p>This is next text</p>

Entonces, mi problema es cómo elimino el espacio en blanco extra entre los dos párrafos en la fuente HTML.

Respuesta popular

Elimine los nodos de texto entre los párrafos primero y último:

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

Analizarlo:

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

Resultado:

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

Si desea mantener el salto de línea entre los párrafos, use un bucle for y llame a Remove() en todos excepto en el último nodo de texto.

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

Resultado:

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


Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow