0

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

这是 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个空格但似乎没有用?)

4

1 回答 1

1

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

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

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

于 2013-03-05T18:30:50.700 回答