如何将文档类型解析为 html 文档类型的字符串

How to parse doctype to string as html doctype

我正在开发 C# 应用程序以通过 EnumWindows 从当前 IE 选项卡获取 html 文件。 现在我得到了 HTMLDocument 并且可以通过 HtmlAgilityPack 将它从 outerHTML ({HTMLDocument}.documentElement.outerHTML) 解析为 html 文件,但是我的输出 html 文件没有文档类型。

我看到 HTMLDocumentdoctype 属性,如何将它解析为与 [ 中的标签相同的字符串=24=] 文件

我通过将 htmlDocument.doctype 转换为动态对象来获得它。另外,你可以通过在 (dynamic)htmlDocument.childNodes list

上循环来获取 <html> 标签之外的其他标签
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);
}