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」を持っている最初の2つのリンクを取得したいです。私はコードを使用しています。

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

しかし、動作しません。それは3つのすべてのリンクを提供します。最初の2つのリンクだけを取得したい。これを行う方法?

Hey!今私も1つのことをしたいです。

以上、class = "href1"のリンクは3つしかありません。クラス= "href1"との10のリンクがあるとします。そして、私は6番目のリンクから9番目のリンクまで4つのリンクだけを取り出したいと思っています。どのようにこれらの特定の4つのリンクを取得するのですか?

答えて

1

position()機能を適用する前に括弧でアンカーセレクタを包むようにしてみてください。

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

+1ああ、それほど難しくありません。私はLINQの回答をとにかく教育的価値のために残します。 – x0n

+0

ありがとう@ x0n、&LINQの答えに感謝します。 –

+0

@ダリン・ディミトロフ....こんにちは!今私も1つのことをしたいです。 上記より、class = "href1"のリンクは3つしかありません。クラス= "href1"との10のリンクがあるとします。そして、私は6番目のリンクから9番目のリンクまで4つのリンクだけを取り出したいと思っています。どのようにこれらの特定の4つのリンクを取得するのですか? –

0

理由だけではなく、それらすべてを取得し、返されたコレクションから最初の2を使用していませんか?どのようなxp​​athであれ、これはLINQを使うよりも読みにくくて究極的に難しいでしょう。

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