HtmlAgilityPack无法检测<;html>;并且</html>;
本文关键字:gt html lt 并且 检测 HtmlAgilityPack | 更新日期: 2023-09-27 18:29:55
在div未关闭且</html>
结束标记出现的情况下,htmlagility似乎无法检测到html不平衡。就像所有的罪都被遗忘了一样。
为什么?
以下是一个失败的测试:
using System.IO;
using System.Linq;
using HtmlAgilityPack;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Foo.Tests.LibraryTests
{
[TestClass]
public class HtmlAgilityPackTest
{
[TestMethod]
public void TestUnbalancedStartTag()
{
var html = "<html><div></html>";
AssertErrorCount(html, 1);
}
private void AssertErrorCount(string html, int expectedNumErrors)
{
var doc = Load(html);
Assert.AreEqual(expectedNumErrors, doc.ParseErrors.Count());
}
private HtmlDocument Load(string html)
{
var doc = new HtmlDocument
{
OptionFixNestedTags = false,
OptionCheckSyntax = true,
OptionAutoCloseOnEnd = false
};
doc.Load(new StringReader(html));
return doc;
}
}
}
我预计会有错误,但没有。
如果线路
var html = "<html><div></html>";
更改为
var html = "<div><div></div>";
测试成功(html敏捷性将正确地报告解析错误)。
大多数浏览器都以相同的方式处理此问题:关闭的</html>
标记也关闭所有其他打开的元素。正如HtmlAgilityPack页面上所说:
"解析器对‘真实世界’中格式错误的HTML非常宽容"。