Supprimer la chaîne d'éléments en double avec HTML Agility Pack

c# html-agility-pack

Question

J'essaie de supprimer toute duplication ou plusieurs occurrences de balises <br> dans mon document HTML. C’est ce que j’ai trouvé jusqu’à présent (code vraiment stupide):

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

Le code trouve les balises br mais ne supprime aucun élément.

Réponse acceptée

Je pense que vous avez trop compliqué votre solution, bien que l’idée semble être correcte, si je comprends bien.

Supposons qu'il soit plus facile de trouver tous les <br /> nœuds en premier et de simplement supprimer ceux dont le frère précédent est le nœud <br /> .

Commençons par l'exemple suivant:

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

trouver maintenant <br /> nœuds et enlever la chaîne d'éléments en double:

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

et en obtenir le résultat:

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

c'est:

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

Réponse populaire

Peut-être pouvez-vous faire cela htmlsource = htmlSource.Replace("<br /><br />", <br />);

ou peut-être quelque chose comme ça

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



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi