如何将文档类型解析为 html 文档类型的字符串
How to parse doctype to string as html doctype
我正在开发 C# 应用程序以通过 EnumWindows 从当前 IE 选项卡获取 html 文件。
现在我得到了 HTMLDocument 并且可以通过 HtmlAgilityPack 将它从 outerHTML ({HTMLDocument}.documentElement.outerHTML) 解析为 html 文件,但是我的输出 html 文件没有文档类型。
我看到 HTMLDocument 有 doctype 属性,如何将它解析为与 [ 中的标签相同的字符串=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);
}
我正在开发 C# 应用程序以通过 EnumWindows 从当前 IE 选项卡获取 html 文件。 现在我得到了 HTMLDocument 并且可以通过 HtmlAgilityPack 将它从 outerHTML ({HTMLDocument}.documentElement.outerHTML) 解析为 html 文件,但是我的输出 html 文件没有文档类型。
我看到 HTMLDocument 有 doctype 属性,如何将它解析为与 [ 中的标签相同的字符串=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);
}