Добавление doctype в HTML через HTML Agility pack

Я знаю, что легко добавлять элементы и атрибуты в HTML-документы с помощью пакета HTML agility pack. Но как я могу добавить doctype (например, HTML5) в HtmlDocument С пакетом гибкости html? Спасибо

2 ответов


синтаксический анализатор пакета гибкости Html обрабатывает doctype как узел комментариев. Чтобы добавить doctype в HTML-документ, просто добавьте узел комментария с нужным типом документа к началу документа:

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

обратите внимание, что мой код не проверяет наличие doctype.


насколько я знаю, AgilityPack не имеет прямые метод для установки doctype, но, как упоминал Ханс, HAP обрабатывает doctype как узел комментария. Таким образом, вы можете попытаться сначала найти существующий doctype, если не создать новый и вставить желаемое значение:

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

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