2012-02-16 4 views
1

ウェブサイトからデータを取得したい。私はHtmlAgilityPack(C#)を使用しています。ウェブサイトのコンテンツにこのようなものがありますXpathの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="list3"> 
    <a href="example4.com" class="href1" >A4</a> 
    <a href="example6.com" class="href2" /> 
    </div> 
    <div class="list3"> 
    <a href="example5.com" class="href1" >A5</a> 
    <a href="example6.com" class="href2" /> 
    </div><div class="list3"> 
    <a href="example6.com" class="href1" >A6</a> 
    <a href="example6.com" class="href2" /> 
    </div><div class="list3"> 
    <a href="example3.com" class="href1" >A7</a> 
    <a href="example6.com" class="href2" /> 
    </div> 
</div> 

ここでは、class = "href1"の7つのリンクがあります。私は3つのリンク(3番目のリンクから5番目のリンクまで)のみを取り出したいと思います。これらの特定のリンクを取得する方法は?

答えて

1

あなたのデータは整形式XMLのようです。 XHTMLページを解析している場合は、おそらく.NET FrameworkのSystem.Xmlクラスから離れてしまう可能性があります。たとえば、XElementにデータをロードするために、あなたが使用できます。

XElement xElement = XElement.Parse(@" 
    <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=""list3""> 
      <a href=""example4.com"" class=""href1"" >A4</a> 
      <a href=""example6.com"" class=""href2"" /> 
     </div> 
     <div class=""list3""> 
      <a href=""example5.com"" class=""href1"" >A5</a> 
      <a href=""example6.com"" class=""href2"" /> 
     </div> 
     <div class=""list3""> 
      <a href=""example6.com"" class=""href1"" >A6</a> 
      <a href=""example6.com"" class=""href2"" /> 
     </div> 
     <div class=""list3""> 
      <a href=""example3.com"" class=""href1"" >A7</a> 
      <a href=""example6.com"" class=""href2"" /> 
     </div> 
    </div>"); 

を次に、そのclass属性href1の値を持つ第五<a>要素、使用に三分の一を選択する:

var links = xElement.XPathSelectElements("//a[@class='href1']").Skip(2).Take(3).ToList(); 

一方、HtmlAgilityPack.HtmlDocumentインスタンスがある場合は、次のようにXPathクエリを実行できます。

HtmlNodeCollection links = htmlDoc.DocumentNode.SelectNodes("//a[@class='href1']"); 
var links3to5 = links.Cast<HtmlNode>().Skip(2).Take(3).ToList(); 
2
コードの

この種:

HtmlDocument doc = new HtmlDocument(); 
    doc.Load(myHtmlFile); 
    foreach (HtmlNode node in doc.DocumentNode.SelectNodes(
     "//div[@class='list3' and position() > 2 and position() < 6]/a[@class='href1']")) 
    { 
     Console.WriteLine("node:" + node.InnerText); 
    } 

はあなたにこのような結果が得られます:

node:A3 
node:A4 
node:A5 
+0

はどうもありがとうございました。.. –

関連する問題