使用HtmlAgilityPack解析时忽略

c# html-agility-pack

我正在使用包含不间断空间的Html Agility Pack在c#中解析html表。

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(page);

其中page是包含特殊字符表的字符串 在文本中。

<td>&#160;test</td>
<td>number =&#160;123&#160;</td>

使用SelectSingleNode(".//td").InnerText将包含这些特殊字符,但我想忽略它们。

是否有一些优雅的方法可以忽略这个(有或没有Html Agility Pack的帮助)而不修改源表?

一般承认的答案

你可以使用HtmlDecode

string foo = HttpUtility.HtmlDecode("Special char: &#160;");

会给你一个字符串:

特殊字符:


热门答案

你说的“特殊字符”非破坏空间是一个有效的角色,可以完美合法地出现在文本中,就像“花哨的引号”,em-dash等一样。

我们通常希望将某些字符视为等效字符。

  • 因此,您可能希望将em-dash,en-dash和减号/破折号视为相同。
  • 或者花哨的报价和直引号一样。
  • 或者将非破碎空间作为普通空间。

但是,这不是HTML Agility Pack可以提供的帮助。您需要使用string.Replace或您自己的规范化函数来执行此操作。

我会建议像:

static string CleanupStringForMyApp(string s){
    // replace characters with their equivalents
    s = s.Replace(string.FromCharCode(160), " ");
    // Add any more replacements you want to do here
    return s;
}


许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因