Ich weiß, dass HTML-Dokumente mit dem HTML-Agility-Paket einfach Elemente und Attribute hinzugefügt werden können. Aber wie kann ich einen Doctype (z. B. den HTML5) zu einem HtmlDocument mit dem HTML Agility Pack hinzufügen? DankeHinzufügen eines Doctyps zu HTML über HTML-Agility-Paket
6
A
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>";
Seit 'DOCTYPE' mit einer beliebigen Mischung aus oberen und unteren, Fall geschrieben werden kann, vielleicht'/comment() [starts-with (Kleinbuchstaben (.), '