Добавить doctype в HTML через HTML Agility pack

.net c# html-agility-pack

Вопрос

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

Принятый ответ

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

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


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow