如何使用HtmlAgilityPack获取此值?

时间:2013-05-01 13:10:14

标签: c# .net parsing html-parsing html-agility-pack

不确定是什么,但它代表创建论坛帖子的用户:

...
    <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 ) );

但是这不包含任何比论坛网址和ID更多的内容。这就是为什么我不确定如何在a链接之外获取该文本。

编辑:我目前正在创建另一个IEnumerable,只收集“span”,然后将它们与第一个列表匹配,但这看起来既麻烦又脆弱,因为某些原因span链接还有1个而不是a个链接,所以我正在index + 1。现在它工作正常,但如果我可以直接从第一个列表的链接访问此信息,它会更健壮。在我点击null值之前的下一个和上一个节点也未到达span部分。所以无论情况如何,这些都是HtmlAgilityPack的独立实体。

1 个答案:

答案 0 :(得分: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