Rimuovi la catena di elementi duplicati con HTML Agility Pack

c# html-agility-pack

Domanda

Sto cercando di rimuovere qualsiasi duplicato o più occorrenze di qualsiasi tag <br> nel mio documento html. Questo è quello che ho inventato finora (codice veramente stupido):

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

Il codice trova i tag br ma non rimuove alcun elemento.

Risposta accettata

Penso che tu abbia complicato troppo la tua soluzione, anche se l'idea sembra essere corretta, come ho capito.

Supponiamo che sarebbe più facile trovare prima tutti i nodi <br /> e rimuovere quelli il cui fratello precedente è <br /> .

Iniziamo con il prossimo esempio:

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

ora trova i nodi <br /> e rimuovi la catena di elementi duplicati:

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

e ottieni il risultato:

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

è:

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

Risposta popolare

Forse puoi farlo htmlsource = htmlSource.Replace("<br /><br />", <br />);

o forse qualcosa di simile

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



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché