使用InnerText時,阻止HTMLAgilityPack連接單詞

c# html-agility-pack

我正在嘗試從HTML文檔中獲取文本的簡單任務。所以我正在使用HTMLdoc.DocumentNode.InnerText。問題是在某些網站上,當它們位於不同的標籤中時,不要在單詞之間放置空格。在那些情況下,DocumentNode.InnerText將這些單詞連接成一個,它就變得毫無用處。

例如,我正在嘗試閱讀包含該行的網站

<span>Ä°stanbul</span><ul><li><a href="i1.htm">Adana</a></li>

我得到的是“Ä°stanbulAdana”,這毫無意義。

我在HTMLAgilityPack文檔和Google上找不到任何解決方案

我錯過了什麼嗎?

謝謝,

一般承認的答案

這應該很容易做到。

const string html = @"<span>Ä°stanbul</span><ul><li><a href=""i1.htm"">Adana</a></li>";
var doc = new HtmlDocument();
doc.LoadHtml(html);
string result = string.Join(" ", doc.DocumentNode.Descendants()
  .Where(n => !n.HasChildNodes && !string.IsNullOrWhiteSpace(n.InnerText))
  .Select(n => n.InnerText));
Console.WriteLine(result); // prints "Ä°stanbul Adana"

熱門答案

好吧,代碼片段為此示例掛起:

const string html = @"<td><font size=""2"">abc </font><font size=""2"">(</font><font size=""2"">abc</font><font size=""2"">) </font><a href=""?query=abc"">abc</a>, abc<br><font size=""2"">abc </font>abc, <a href=""?query=abc"">abc</a>, abc, <a href=""?query=abc"">abc</a><br><font size=""2"">abc </font>abc abc, abc abc<br></td>";

如果沒有join-clause,它就不會掛起(但它也沒有正確地放置空格)。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因