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:
HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//p");
if (nodes == null)
return;
foreach (HtmlNode node in nodes)
{
node.InnerHtml = node.InnerHtml.Trim();
if (node.InnerHtml == string.Empty)
node.ParentNode.RemoveChild(node);
}
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?
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);
}
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);
}