0

それが何と呼ばれているかはわかりませんが、フォーラムスレッドを作成したユーザーを表しています:

...
    <a href="http://myforum.com/forum/most-fav-action-movies/" id="thread_title_10178" style="font-weight:bold">Most Favorite Action Movies</a>     
  </div>
  <div class="smallfont">
    <span style="cursor:pointer" onclick="window.open('http://myforum.com/forum/members/u506/', '_self')">JOANVENGE</span>
  </div>
</td>
<td class="alt2" title="Replies: 17, Views: 651">
  <div class="smallfont" style="text-align:right; white-space:nowrap">
...

したがって、この場合、取得しようとしているのは「JOANVENGE」文字列です。現在、aこれを使用してリンクを取得しています:

IEnumerable<HtmlNode> threadLinks = doc.DocumentNode.
                                      Descendants ( "a" ).
                                      Where ( link => link.Id.StartsWith ( linkIdPrefix ) );

ただし、これにはフォーラムの URL と ID 以外の情報は含まれていません。aそのため、リンクを超えてそのテキストを取得する方法がわかりません。

編集:現在、IEnumerable「スパン」のみを収集して最初のリストに一致させる別のものを作成していますが、何らかの理由spanでリンクがリンクよりも 1 つ多いため、これは面倒で壊れやすいaようですindex + 1. 現在は問題なく動作していますが、最初のリストのリンクからこの情報に直接アクセスできれば、より堅牢になります。値をヒットするまで、次および前のノードもセクションnullに到達しません。spanしたがって、どのような場合でも、これらは HtmlAgilityPack の個別のエンティティであると想定しています。

4

1 に答える 1

1

XPATHを使用できます。たとえば、次のコード:

HtmlDocument doc = new HtmlDocument();
doc.Load("test.htm");

// get any SPAN element recursively with a STYLE attribute set to 'cursor:pointer'
Console.WriteLine(doc.DocumentNode.SelectSingleNode("//span[@style='cursor:pointer']").InnerHtml);

ダンプします

JOANVENGE
于 2013-05-01T16:49:56.143 に答える