Je voudrais utiliser le pack HTMLAgility pour remplacer un nœud dans le document par un nœud de texte. Le but de ceci est de supprimer les étiquettes entourant le noeud lui-même. Actuellement, je fais quelque chose comme ça:
//This code fixes redundant HTML formatting tags
//This is a snippet of code
foreach (var hChildNode in hd.DocumentNode.SelectNodes("//b//b | //i//i | //u//u") ?? Enumerable.Empty<HtmlNode>())
hChildNode.Name = "remove";
StringBuilder sb = new StringBuilder(hd.DocumentNode.WriteTo());
sb.Replace("<remove>", string.Empty);
sb.Replace("</remove>", string.Empty);
Y a-t-il une meilleure manière de faire cela? Si j'essaie de créer un nouveau nœud de texte, puis de faire quelque chose comme l'extrait de code ci-dessous, je reçois une erreur de conversion invalide:
foreach (var hChildNode in hd.DocumentNode.SelectNodes("//b//b | //i//i | //u//u") ?? Enumerable.Empty<HtmlNode>())
{
HtmlNode hNewNode = hd.CreateTextNode(hChildNode.InnerHtml);
hChildNode.ParentNode.ReplaceChild(hNewNode, hChildNode);
}
(mis à jour après une faute de frappe, mais le problème persiste)
Est-ce que j'utilise mal la méthode? Existe-t-il une autre méthode que je suis censé utiliser pour exécuter des fonctions de ce type? Merci.
Le but de ceci est de supprimer les étiquettes entourant le noeud lui-même
Votre deuxième code coupé effectue exactement la suppression de balise sauf une faute de frappe (je suppose):
HtmlNode hNewNode = hd.CreateTextNode(hNewNode.InnerHtml);
Vous devez remplacer hNewNode.InnerHtml
par hChildNode.InnerHtml
sinon votre code ne sera même pas compilé (utilisation d'une variable non affectée).
Je souhaite également mentionner qu’après la création du nœud de texte, il n’aura plus de nœuds enfants du nœud remplacé (au lieu de cela, la même valeur sera InnerHtml
propriété InnerHtml
avec le nœud remplacé).