Je peux facilement supprimer l'élément simplement par note.Remove ()
HtmlDocument html = new HtmlDocument();
html.Load(Server.MapPath(@"~\Site\themes\default\index.cshtml"));
foreach (var item in html.DocumentNode.SelectNodes("//removeMe"))
{
item.Remove();
}
Mais cela supprime également le innerHtml. Que se passe-t-il si je souhaite uniquement supprimer la balise et conserver le code innerHtml?
Exemple:
<ul>
<removeMe>
<li>
<a href="#">Keep me</a>
</li>
</removeMe>
</ul>
Toute aide serait appréciée :)
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
var node = doc.DocumentNode.SelectSingleNode("//removeme");
node.ParentNode.RemoveChild(node, true);
Il existe un problème d'implémentation KeepGrandChildren dans bool pour les personnes qui pourraient avoir du texte avec l'élément à supprimer. Si la balise removeme contenait du texte, celui-ci sera également supprimé. Par exemple, <removeme>text<p>more text</p></removeme>
deviendra <p>more text</p>
Essaye ça:
private static void RemoveElementKeepText(HtmlNode node)
{
//node.ParentNode.RemoveChild(node, true);
HtmlNode parent = node.ParentNode;
HtmlNode prev = node.PreviousSibling;
HtmlNode next = node.NextSibling;
foreach (HtmlNode child in node.ChildNodes)
{
if (prev != null)
parent.InsertAfter(child, prev);
else if (next != null)
parent.InsertBefore(child, next);
else
parent.AppendChild(child);
}
node.Remove();
}