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敏捷性将正确地报告解析错误)。

HtmlAgilityPack无法检测<;html>;并且</html>;

大多数浏览器都以相同的方式处理此问题:关闭的</html>标记也关闭所有其他打开的元素。正如HtmlAgilityPack页面上所说:

"解析器对‘真实世界’中格式错误的HTML非常宽容"。