Как снять комментарии из HTML с помощью Agility Pack без потери DOCTYPE

html-agility-pack

Вопрос

Я пытаюсь удалить ненужный контент из HTML. В частности, я хочу удалить комментарии. Я нашел довольно хорошее решение ( Grabbing meta-tags и комментарии с помощью HTML Agility Pack ), однако DOCTYPE рассматривается как комментарий и поэтому удаляется вместе с комментариями. Как я могу улучшить код ниже, чтобы убедиться, что DOCTYPE сохранен?

var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(htmlContent);
var nodes = htmlDoc.DocumentNode.SelectNodes("//comment()");
if (nodes != null)
{
    foreach (HtmlNode comment in nodes)
    {
        comment.ParentNode.RemoveChild(comment);
    }
}

Принятый ответ

Проверьте, что комментарий не начинается с DOCTYPE

  foreach (var comment in nodes)
  {
     if (!comment.InnerText.StartsWith("DOCTYPE"))
         comment.ParentNode.RemoveChild(comment);
  }

Популярные ответы

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

это отменит все комментарии из документа



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow