5

HTMLドキュメントからテキストを取得するという簡単なタスクを実行しようとしています。そのためにHTMLdoc.DocumentNode.InnerTextを使用しています。問題は、一部のサイトでは、単語が異なるタグにある場合、単語の間にスペースを入れないことです。そのような場合、DocumentNode.InnerTextはそれらの単語を1つに接続し、役に立たなくなりました。

たとえば、私はその行を含むサイトを読み込もうとしています

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

意味のない「İstanbulAdana」を取得しています。

HTMLAgilityPackのドキュメントでもGoogleでも解決策が見つかりませんでした

私は何かが足りませんか?

ありがとう、

4

2 に答える 2

10

それはかなり簡単なはずです。

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"
于 2012-08-08T20:16:04.367 に答える
0

この例では、コードスニペットがハングします。

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がないとハングしません(ただし、スペースも正しく配置されません)。

于 2012-08-17T16:01:34.070 に答える