2012-02-11 3 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> 

이제 class = "href1"인 처음 두 링크를 가져 오려고합니다. 나는 코드를 사용하고있다.

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

그러나 작동하지 않습니다. 그것은 세 가지 링크를 모두 제공합니다. 첫 번째 두 링크 만 가져 오려고합니다. 이 작업을 수행하는 방법?

안녕하세요! 이제 나는 1 가지를하고 싶다.

이상, class = "href1"인 링크가 3 개 있습니다. 클래스 = "href1"인 10 개의 링크가 있다고 가정합니다. 그리고 6 번째 링크에서 9 번째 링크까지 4 개의 링크 만 가져 오려고합니다. 이 네 개의 링크를 가져 오는 방법은 무엇입니까? position() 기능을 적용하기 전에 괄호 앵커 선택 포장 등의

답변

1

시도 :

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

+1 오, 그리 어렵지 않습니다 ... 하. 어쨌든 교육적 가치를 위해 LINQ 응답을 남겨 둘 것입니다. – x0n

+0

Thanks @ x0n, & LINQ 답변 주셔서 감사합니다. –

+0

@darin dimitrov .... 안녕하세요! 이제 나는 1 가지를하고 싶다. 위와 같이 class = "href1"인 링크는 세 개뿐입니다. 클래스 = "href1"인 10 개의 링크가 있다고 가정합니다. 그리고 6 번째 링크에서 9 번째 링크까지 4 개의 링크 만 가져 오려고합니다. 이 네 개의 링크를 가져 오는 방법은 무엇입니까? –

0

왜 단지 그들 모두를 얻을 반환 된 컬렉션에서 처음 두를 사용하지? 어떤 xpath를 써야 할지를 궁극적으로 LINQ를 사용하는 것보다 훨씬 덜 읽을 수 있습니다.

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