使用HtmlAgilityPack解析時忽略

c# html-agility-pack

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

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

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

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

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

是否有一些優雅的方法可以忽略這個(有或沒有Html Agility Pack的幫助)而不修改源表?

一般承認的答案

你可以使用HtmlDecode

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

會給你一個字符串:

特殊字符:


熱門答案

你說的“特殊字符”非破壞空間是一個有效的角色,可以完美合法地出現在文本中,就像“花哨的引號”,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合法嗎? 是的,了解原因