HtmlAgilityPack道明.innertext缺陷实现

本文关键字:实现 缺陷 innertext 道明 HtmlAgilityPack | 更新日期: 2023-09-27 18:02:36

我正在从数据库中的数据构建一些表。它来自很多国际资源,所以我有编码问题,我想我已经把它们都清理干净了。但是现在我看到一些奇怪的输出,不知道为什么。

这是一个VS2010中的c#应用程序。在调试中运行,我看到类中的字符串开始:

Animal and vegetable oils  1 < 5 MW <br>5-50 MW  30 <br>

但是当我赋值为:

td = htmlDoc.CreateElement("td");
td.Attributes.Add("rowspan", "5");
td.Attributes.Add("valign", "top");
td.InnerHtml = this.DRGuideNote.ToString();

道明。InnerHtml显示

Animal and vegetable oils  1 < 5='"'" mw='"'"><br>5-50 MW  30 <br>

为什么要将等号和转义引号放入文本中??它不会对所有的数据进行处理,只会对几个文件进行处理。什么好主意吗?(PS.有html break在字符串没有出现,我怎么张贴,所以它忽略html?

HtmlAgilityPack道明.innertext缺陷实现

HTML Agility Pack的HTML解析器将<视为HTML标签的开始字符。因此,当它解析5和MW时,它认为它在标签内,因此它将它们视为标签属性。这种处理一旦进入<br>就停止,这迫使它关闭标记。

它在浏览器中工作的原因是因为浏览器通常遵循HTML5规范来处理无效的HTML。该规范有很多关于如何处理无效HTML的规则,目的是让人们理解其意图。在这种情况下,规范规定后面跟着空格的carat应该被视为文本。HAP的解析器不处理这种特殊的边缘情况。所以我不会说这是一个bug,而是HAP原生HTML解析器的限制。

HAP的另一种选择是CsQuery (nuget),它使用完整的HTML5解析器(实际上与Firefox相同的HTML解析器),并且可以处理这种标记。