我正在使用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检查这个?
任何想法或其他选项将不胜感激。感谢
答案 0 :(得分:5)
您可以检查HTML元素下是否有HEAD元素或BODY元素,例如:
bool hasHead = doc.DocumentNode.SelectSingleNode("html/head") != null;
bool hasBody = doc.DocumentNode.SelectSingleNode("html/body") != null;
如果没有HTML元素,或者HTML元素下没有BODY元素,则会失败。
注意我不使用这种XPATH表达式"//head"
,因为即使头部不直接位于HTML元素下,它也会产生结果。