Удаление закомментированных строк из InnerText - PullRequest
2 голосов
/ 02 февраля 2012

В настоящее время я использую приведенный ниже код, который извлекает InnerText, однако, что происходит, если я застрял с кучей комментариев html <-- как мне удалить их, используя приведенный ниже код?

HtmlWeb hwObject = new HtmlWeb();
HtmlAgilityPack.HtmlDocument htmldocObject = hwObject.Load(htmlURL);

foreach (var script in htmldocObject.DocumentNode.Descendants("script").ToArray())
    script.Remove();
HtmlNode body = htmldocObject.DocumentNode.SelectSingleNode("//body");
resultingHTML = body.InnerText.ToString();

Ответы [ 2 ]

3 голосов
/ 03 февраля 2012

Просто отфильтруйте узлы по узлам комментариев и вызовите удаление на них.

var rootNode = doc.DocumentNode;
var query = rootNode.Descendants().OfType<HtmlCommentNode>().ToList();
foreach (var comment in query)
{
    comment.Remove();
}
2 голосов
/ 02 февраля 2012

Этот , вероятно, лучший ответ:

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