Comment remplacer le commentaire HTML <!-- comment --> balises avec string.Empty

c# html html-agility-pack

Question

J'essaie de supprimer toutes les balises de commentaire HTML de mon htmlNode. Voici le code de sélection HtmlNode de mon c #.

HtmlNode table = doc5.DocumentNode.SelectSingleNode("//div[@id='div12']");

code pseudo-balise HtmlNode renvoyé ci-dessous

HtmlNode table = doc5.DocumentNode.SelectSingleNode("//div[@id='div12']");

J'ai réussi à configurer l'expression régulière pour résoudre mon problème, le code c # est le suivant. Mais, seulement dans mon test, cela a fonctionné avec succès et avec le type d’entrée sous forme de chaîne. Voir le code c # ci-dessous.

HtmlNode table = doc5.DocumentNode.SelectSingleNode("//div[@id='div12']");

Résultat = "". c'est ce que je veux en live pour tous les tags.

J'ai vu de nombreux exemples de code sur les forums et le forum stackoverflow. mais rien n'est proche de ce que je veux. un post était vraiment utile mais c'était pour php - encore une fois inutile.

Maintenant, si dans la fonction Regex.Replace ci-dessus j'entre

HtmlNode table = doc5.DocumentNode.SelectSingleNode("//div[@id='div12']");

Je reçois l'erreur suivante

La meilleure méthode surchargée pour 'System.Text.RegularExpressions.Regex.Replace (string, System.Text.RegularExpressions.MatchEvaluator, int)' comporte des arguments non valides

J'ai aussi essayé de convertir

HtmlNode table = doc5.DocumentNode.SelectSingleNode("//div[@id='div12']");

Mais alors je reçois la valeur de retour rkr = "HtmlAgilityPack.HtmlNode".

Toute aide serait d'une grande aide.

Réponse acceptée

Merci à tous pour votre aide. J'ai trouvé la solution dans la fonction suivante.

Juste appelé la fonction après avoir rempli le doc5 comme suit

HtmlNode table = doc5.DocumentNode.SelectSingleNode("//div[@id='div12']");

RemoveComments(table);

public static void RemoveComments(HtmlNode node)
{
    foreach (var n in node.ChildNodes.ToArray())
        RemoveComments(n);
    if (node.NodeType == HtmlNodeType.Comment)
        node.Remove();
}

Pour référence: j'ai trouvé la réponse dans le post suivant. Comment sélectionner des types de nœuds qui sont HtmlNodeType Comment using HTMLAgilityPack

très précis et avec de nombreux exemples différents, exactement ce que je recherchais.


Réponse populaire

Répondu ici :

doc5.DocumentNode.Descendants()
    .Where(n => n.NodeType == HtmlAgilityPack.HtmlNodeType.Comment)
    .ToList()
    .ForEach(n => n.Remove());

Remarque: ToList est nécessaire car vous ne pouvez pas modifier la séquence énumérée.




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