Ich weiß, dass es einfach ist, HTML-Dokumenten Elemente und Attribute mit dem HTML-Agilitätspaket hinzuzufügen. Aber wie kann ich einen Doctype (zB den HTML5) zu einem HtmlDocument mit dem HTML Agility Pack hinzufügen ? Vielen Dank
Der Html Agility Pack-Parser behandelt den Doctype als Kommentarknoten. Um einen Doctype zu einem HTML-Dokument hinzuzufügen, fügen Sie einfach einen Kommentarknoten mit dem gewünschten Doctype am Anfang des Dokuments ein:
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 nicht nach dem Vorhandensein eines Doctypes sucht.
Soweit ich weiß, hat AgilityPack keine direkte Methode, um den Doctype zu setzen, aber wie Hans erwähnt, behandelt HAP den Doctype als Kommentarknoten. Sie könnten also versuchen, den vorhandenen Doctype zuerst zu finden, wenn nicht einen neuen erstellen und einen gewünschten Wert einfügen:
var doctype = doc.DocumentNode.SelectSingleNode("/comment()[starts-with(.,'<!DOCTYPE')]");
if (doctype == null)
doctype = doc.DocumentNode.PrependChild(doc.CreateComment());
doctype.InnerHtml = "<!DOCTYPE html>";