Come rimuovere commenti da HTML usando Agility Pack senza perdere DOCTYPE

html-agility-pack

Domanda

Sto cercando di rimuovere il contenuto non necessario dall'HTML. Nello specifico voglio rimuovere i commenti. Ho trovato una soluzione piuttosto buona ( afferrare meta-tag e commenti usando HTML Agility Pack ), tuttavia il DOCTYPE è trattato come un commento e quindi rimosso insieme ai commenti. Come posso migliorare il codice qui sotto per assicurarmi che il DOCTYPE sia preservato?

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

Risposta accettata

Verifica che il commento non inizi con DOCTYPE

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

Risposta popolare

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

questo eliminerà tutti i commenti dal documento




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché