我正在使用 HTML Agility Pack 来验证我的 html。下面是我正在使用的,
public class MarkupErrors
{
public string ErrorCode { get; set; }
public string ErrorReason { get; set; }
}
public static List<MarkupErrors> IsMarkupValid(string html)
{
var document = new HtmlAgilityPack.HtmlDocument();
document.OptionFixNestedTags = true;
document.LoadHtml(html);
var parserErrors = new List<MarkupErrors>();
foreach(var error in document.ParseErrors)
{
parserErrors.Add(new MarkupErrors
{
ErrorCode = error.Code.ToString(),
ErrorReason = error.Reason
});
}
return parserErrors;
}
假设我的输入类似于下图所示:
<h1>Test</h1>
Hello World</h2>
<h3>Missing close h3 tag
所以我当前的函数返回以下错误列表
- Start tag <h2> was not found
- End tag </h3> was not found
这很好...
我的问题是我希望整个 html 有效,即使用适当的 <head>
和 <body>
标记,因为此 html 稍后可用于预览,请下载为 .html 文件。
所以我想知道我是否可以使用 HTML Agility Pack 检查这个?
任何想法或其他选项将不胜感激。谢谢
最佳答案
您可以检查 HTML 元素下是否有 HEAD 元素或 BODY 元素,例如:
bool hasHead = doc.DocumentNode.SelectSingleNode("html/head") != null;
bool hasBody = doc.DocumentNode.SelectSingleNode("html/body") != null;
如果没有 HTML 元素,或者如果 HTML 元素下没有 BODY 元素,这些将失败。
请注意,我不使用这种 XPATH 表达式 "//head"
,因为即使 head 不在 HTML 元素的正下方,它也会给出结果。
关于c# - 如何使用 Html Agility Pack 进行 HTML 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16645257/