2012-02-11 78 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);