Как разобрать doctype в строку как html doctype - PullRequest
0 голосов
/ 24 октября 2018

Я работаю над приложением C #, чтобы получить html-файл с текущей вкладки IE по EnumWindows .Теперь я получил HTMLDocument и могу проанализировать его в html-файл из externalHTML ( {HTMLDocument} .documentElement.outerHTML ) по HtmlAgilityPack , но мой выходной html-файл не имеет типа документа.

Я вижу, что HTMLDocument имеет свойство doctype , как мне разобрать его в строку так же, как тег в HTML-файле

1 Ответ

0 голосов
/ 31 октября 2018

Я получил это, приведя 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);
}
...