Existe-t-il un moyen de remplacer les nœuds HTML par des nœuds de texte à l'aide de HTMLAgilityPack?

c# dom html html-agility-pack

Question

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:

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

(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.

Réponse populaire

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é).




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