Как разобрать doctype в строку как html doctype
Я работаю над приложением C#, чтобы получить HTML-файл с текущей вкладки IE от EnumWindows. Теперь я получил HTMLDocument и могу разобрать его в html-файл из externalHTML ({HTMLDocument}.documentElement.outerHTML) с помощью HtmlAgilityPack, но мой выходной html-файл не имеет типа документа.
Я вижу, что HTMLDocument имеет свойство doctype, как я могу разобрать его в строку так же, как тег в файле HTML
1 ответ
Решение
Я получил это путем кастинга htmlDocument.doctype
как динамический объект. Другой, вы можете получить другие теги, которые находятся вне <html>
пометить петлей (dynamic)htmlDocument.childNodes
список
private static void InsertDocType(HTMLDocument htmlDocument, HtmlDocument document)
{
// get html node
HtmlNode htmlNode = document.DocumentNode.SelectSingleNode("/html");
// get doctype node from HTMLDocument
var doctype = (dynamic)htmlDocument.doctype;
StringBuilder doctypeText = new StringBuilder();
doctypeText.Append("<!DOCTYPE");
doctypeText.Append(" ");
doctypeText.Append(doctype.name);
// add PUBLIC
if (!string.IsNullOrEmpty(doctype.publicId))
{
doctypeText.Append(" PUBLIC \"");
doctypeText.Append(doctype.publicId);
doctypeText.Append("\"");
}
// add sytem id
if (!string.IsNullOrEmpty(doctype.systemId))
{
doctypeText.Append(" \"");
doctypeText.Append(doctype.systemId);
doctypeText.Append("\"");
}
// add close tag
doctypeText.Append(">");
doctypeText.Append(Environment.NewLine);
HtmlCommentNode doctypeNode = document.CreateComment(doctypeText.ToString());
document.DocumentNode.InsertBefore(doctypeNode, htmlNode);
}