我正在从数据库中的数据构建一些表。它来自许多国际来源,所以我遇到了编码问题,我想我已经把它们全部清理干净了。但现在我看到一些奇怪的输出,无法弄清楚原因。
这是VS2010中的C#应用程序。在Debug中运行,我看到我班上的字符串开始了:
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();
td.InnerHtml显示
Animal and vegetable oils 1 < 5=\"\" mw=\"\"><br>5-50 MW 30 <br>
为什么将等号和转义引号放入该文本?它不是跨所有数据,只是几个文件。有任何想法吗? (PS。字符串中有html中断没有显示,我如何发布,所以它忽略了html?试过“缩进4个空格但似乎没有用?”
答案 0 :(得分:1)
HTML Agility Pack的HTML解析器将<
视为HTML标记的开头字符。因此,当它解析5和MW时,它认为它在标记内,因此它将它们视为标记属性。一旦它进入<br>
迫使它关闭标签,这种处理就会停止。
它在浏览器中工作的原因是因为浏览器通常遵循HTML5规范来处理无效的HTML。该规范有很多关于如何处理无效HTML的规则,目的是弄清楚意图是什么。在这种情况下,规范说一个克拉后跟一个空格应该被视为文本。 HAP的解析器不处理这种特殊的边缘情况。所以我不会说这是一个错误,而是HAP原生HTML解析器的限制。
HAP的替代方法是CsQuery(nuget),它使用完整的HTML5解析器(实际上与Firefox相同的HTML解析器),并且可以处理这种标记。