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> 

Теперь я хочу, чтобы принести первые две ссылки, которые имеет класс = «href1». Я использую код.

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

Но, он не работает. Он дает все три ссылки. Я хочу получить только первые две ссылки. Как это сделать?

Эй! Теперь я тоже хочу сделать 1 вещь.

Выше, у меня есть только три ссылки с классом = "href1". Предположим, у меня есть 10 ссылок с class = "href1". И я хочу получить только четыре ссылки из 6-й ссылки на 9-ю ссылку. Как получить эти четыре ссылки?

ответ

1

Try как обертывание селектор якоря в скобках перед применением функции position():

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

+1 О, это не так сложно ... Ха. Я все равно оставлю свой ответ LINQ для образовательной ценности. – x0n

+0

Спасибо @ x0n, и спасибо за ваш ответ LINQ. –

+0

@ darin dimitrov .... Эй! Теперь я тоже хочу сделать 1 вещь. Выше, у меня есть только три ссылки с классом = "href1". Предположим, у меня есть 10 ссылок с class = "href1". И я хочу получить только четыре ссылки из 6-й ссылки на 9-ю ссылку. Как получить эти четыре ссылки? –

0

Почему бы не просто получить их и использовать первые два из возвращенного коллекции? Независимо от того, какой xpath вам нужно было бы сделать это, в конечном счете, было бы чертовски мало читаемо, чем использование LINQ:

Смежные вопросы