使用HtmlAgilityPack解析时忽略

时间:2013-08-14 09:12:22

标签: 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的帮助)而无需修改源表?

2 个答案:

答案 0 :(得分:2)

您可以使用HtmlDecode

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

会给你一个字符串:

  

特别字符:

答案 1 :(得分:0)

你说的“特殊字符”非破坏空间是一个有效的字符,可以完全合法地出现在文本中,就像“花哨的引号”,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;
}