Как разобрать 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);
}
Другие вопросы по тегам