HtmlAgilityPack td.innertext错误?

时间:2013-03-05 17:18:00

标签: c# visual-studio-2010 html-agility-pack

我正在从数据库中的数据构建一些表。它来自许多国际来源,所以我遇到了编码问题,我想我已经把它们全部清理干净了。但现在我看到一些奇怪的输出,无法弄清楚原因。

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

1 个答案:

答案 0 :(得分:1)

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

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

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