Comment supprimer un nœud s'il n'a pas de nœud parent

.net asp.net c# html-agility-pack

Question

J'utilise le pack d'agilité HTML pour nettoyer les entrées d'un WYSIWYG. Ce n'est peut-être pas la meilleure façon de faire cela, mais je travaille avec des développeurs qui explosent au contact de regex, donc cela devra suffire.

Mon contenu WYSIWYG ressemble à ceci (par exemple):

<p></p>
<p></p>
<p><span><input id="textbox" type="text" /></span></p>

Je dois enlever les balises de paragraphe vides. Voici comment je le fais en ce moment:

<p></p>
<p></p>
<p><span><input id="textbox" type="text" /></span></p>

Toutefois, le code HTML n'étant pas complet, les balises de paragraphe n'ont pas de nœud parent et RemoveChild échouera dès ParentNode que ParentNode est null.

Je ne peux cependant pas trouver un autre moyen de supprimer une balise. Quelqu'un peut-il m'indiquer une autre méthode?

Réponse acceptée

Techniquement, les éléments de premier niveau sont les enfants de la racine du document. Le code suivant devrait donc fonctionner:

if (node.InnerHtml == String.Empty) {
    HtmlNode parent = node.ParentNode;
    if (parent == null) {
        parent = doc.DocumentNode;
    }
    parent.RemoveChild(node);
}

Réponse populaire

Vous voulez supprimer de la collection, non?

HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//p");
if (nodes == null)
    return;

for (int i = 0; i < nodes.Count - 1; i++)
{
    nodes[i].InnerHtml = nodes[i].InnerHtml.Trim();
    if (nodes[i].InnerHtml == string.Empty)
        nodes.Remove(i);
}



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