2012-02-11 51 views
2

我想从网站获取数据。我正在使用HtmlAgilityPack。在该网站的内容是这样的HtmlAgilityPack中的谓词相关

<div id="list"> 
<div class="list1"> 
    <a href="example1.com" class="href1" >A1</a> 
    <a href="example4.com" class="href2" /> 
</div> 
<div class="list2"> 
    <a href="example2.com" class="href1" >A2</a> 
    <a href="example5.com" class="href2" /> 
</div> 
<div class="list3"> 
    <a href="example3.com" class="href1" >A3</a> 
    <a href="example6.com" class="href2" /> 
</div> 
</div> 

现在,我希望获取其具有类=“href1”前两个环节。我正在使用代码。

HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//a[@class='href1'][position()<3]"); 

但是,它不工作。它提供了所有三个链接。我只想抓取前两个链接。这个怎么做?

嘿!现在我想做一件事。

上面,我只有三个class =“href1”的链接。假设,我有10个class =“href1”的链接。而且我只想从第6个链接到第9个链接取得四个链接。如何获取这些特定的四个链接?

回答

1

尝试像应用position()函数之前包裹在括号中的锚选择:

var nodes = doc.DocumentNode.SelectNodes("(//a[@class='href1'])[position()<3]"); 
+1

+1哦,这并不难......哈。无论如何,我将离开我的LINQ答案以获得教育价值。 – x0n 2012-02-11 21:20:49

+0

谢谢@ x0n,感谢您的LINQ答案。 – 2012-02-11 21:44:59

+0

@darin dimitrov ....嘿!现在我想做一件事。 上面,我只有三个class =“href1”的链接。假设,我有10个class =“href1”的链接。而且我只想从第6个链接到第9个链接取得四个链接。如何获取这些特定的四个链接? – 2012-02-16 17:51:01

0

为什么不干脆让他们所有,并从返回的集合使用前两种?无论你需要做什么xpath,最终都会比使用LINQ的可读性差很多:

using System.Linq; 
... 
HtmlNodeCollection firstTwoHrefs = doc.DocumentNode 
    .SelectNodes("//a[@class='href']").Take(2);