Elimine la cadena de elementos duplicados con HTML Agility Pack

c# html-agility-pack

Pregunta

Estoy tratando de eliminar las ocurrencias duplicadas o más de las etiquetas <br> en mi documento html. Esto es lo que he encontrado hasta ahora (código realmente estúpido):

HtmlNodeCollection elements = nodeCollection.ElementAt(0)
                             .SelectNodes("//br");

if (elements != null)
{
    foreach (HtmlNode element in elements)
    {
        if (element.Name == "br")
        {
             bool iterate = true;
             while(iterate == true)
             {
                 iterate = removeChainElements(element);
             }
         }
     }
}

private bool removeChainElements(HtmlNode element)
{
    if (element.NextSibling != null && element.NextSibling.Name == "br")
    {
        element.NextSibling.Remove();
    }
    if (element.NextSibling != null && element.NextSibling.Name == "br")
         return true;
    else
         return false;
    }
}

El código encuentra las etiquetas br pero no elimina ningún elemento.

Respuesta aceptada

Creo que usted también complicó su solución, aunque la idea parece ser correcta, según tengo entendido.

Supongamos que sería más fácil encontrar todos los nodos <br /> primero, y simplemente eliminar aquellos, cuyo hermano anterior es <br /> .

Empecemos con el siguiente ejemplo:

var html = @"<div>the first line<br /><br />the next one<br /></div>";
var doc = new HtmlDocument();
doc.LoadHtml(html);

ahora encuentre los nodos <br /> y elimine la cadena de elementos duplicados:

var nodes = doc.DocumentNode.SelectNodes("//br").ToArray();
foreach (var node in nodes)
    if (node.PreviousSibling != null && node.PreviousSibling.Name == "br")
        node.Remove();

y obtener el resultado de ello:

var output = doc.DocumentNode.OuterHtml;

es:

<div>the first line<br>the next one<br></div>

Respuesta popular

Quizás puedas hacer esto htmlsource = htmlSource.Replace("<br /><br />", <br />);

o tal vez algo como esto

    string html = "<br><br><br><br><br>";

    html = html.Replace("<br>", string.Empty);

    html = string.Format("{0}<br />", html);

    html = html.Replace(" ", string.Empty);
    html = html.Replace("\t", string.Empty);


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué