2011-07-04 28 views
8

Tôi đang cố xóa nội dung không cần thiết khỏi HTML. Cụ thể là tôi muốn xóa nhận xét. Tôi tìm thấy một giải pháp khá tốt (Grabbing meta-tags and comments using HTML Agility Pack) tuy nhiên DOCTYPE được coi là nhận xét và do đó bị xóa cùng với các nhận xét. Làm cách nào để tôi có thể cải thiện mã bên dưới để đảm bảo DOCTYPE được giữ nguyên?Cách tách nhận xét khỏi HTML bằng Gói Agility mà không mất 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); 
    } 
} 

Trả lời

8

Kiểm tra xem bình luận không bắt đầu bằng DOCTYPE

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

Có phải đó là an toàn không? Điều gì xảy ra nếu có một nhận xét như ? Tôi biết nó là một trường hợp cạnh nhưng tôi đoán quan điểm của tôi là: không có cách nào tốt hơn là kiểm tra nội dung của nút bình luận? – desautelsj

+0

Có thể bỏ qua nó khi nó bắt đầu với DOCTYPE và là con đầu tiên của phần tử gốc? –

+0

Tôi đã làm một số thử nghiệm và tìm ra nội dung của bình luận thực sự bao gồm ' desautelsj

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

này sẽ lột tất cả các ý kiến ​​từ các tài liệu

Các vấn đề liên quan