2012-03-31 15 views

Antwort

6

Der Html Agility Pack-Parser behandelt den Doctype als Kommentarknoten. Um eine Doctype ein HTML-Dokument fügen Sie einfach einen Kommentarknoten mit dem gewünschten Doctype zu Beginn des Dokuments hinzuzufügen:

HtmlDocument htmlDoc = new HtmlDocument(); 

htmlDoc.Load("withoutdoctype.html"); 

HtmlCommentNode hcn = htmlDoc.CreateComment("<!DOCTYPE html>"); 

HtmlNode htmlNode = htmlDoc.DocumentNode.SelectSingleNode("/html"); 
htmlDoc.DocumentNode.InsertBefore(hcn, htmlNode); 

htmlDoc.Save("withdoctype.html"); 

Bitte beachten Sie, dass mein Code für die bestehende eines Doctype nicht überprüft .

8

Soweit ich weiß, AgilityPack hat keine direkte Methode, um den Doctype, aber wie Hans erwähnt, HAP behandelt den Doctype als Kommentar-Knoten. So könnten Sie versuchen, zuerst die vorhandene Doctype zu finden, wenn nicht eine neue erstellen und einen gewünschten Wert dort einfügen:

var doctype = doc.DocumentNode.SelectSingleNode("/comment()[starts-with(.,'<!DOCTYPE')]"); 
if (doctype == null) 
    doctype = doc.DocumentNode.PrependChild(doc.CreateComment()); 

doctype.InnerHtml = "<!DOCTYPE html>"; 
+0

Seit 'DOCTYPE' mit einer beliebigen Mischung aus oberen und unteren, Fall geschrieben werden kann, vielleicht'/comment() [starts-with (Kleinbuchstaben (.), '

Verwandte Themen