c#
  • .net
  • xml
  • xpath
  • html-agility-pack
  • 2012-12-15 7 views 5 likes 
    5

    div内から2つのリンクを取得したいと考えています。HtmlAgilityPack DIV内のすべてのリンクを取得

    現在、私は1つを選択できますが、それ以上の場合は動作しないようです。

    HtmlWeb web = new HtmlWeb(); 
         HtmlDocument doc = web.Load(url); 
    
    HtmlNode node = doc.DocumentNode.SelectSingleNode("//div[@class='myclass']"); 
    
          if (node != null) 
          { 
           foreach (HtmlNode type in node.SelectNodes("//[email protected]")) 
           { 
            recipe.type += type.InnerText; 
           } 
          } 
          else 
           recipe.type = "Error fetching type."; 
    

    HTMLのこの作品からそれを取得しよう:

    <div class="myclass"> 
    <h3>Not Relevant Header</h3> 
        <a href="#">This text</a>, 
        <a href="#">and this text</a> 
    </div> 
    

    任意の助けを事前に感謝を理解されたいです。

    +0

    Deejddより多くの場合、正常に使用できる、より汎用的なソリューションが必要です。 –

    答えて

    11
    var div = doc.DocumentNode.SelectSingleNode("//div[@class='myclass']"); 
    if(div!=null) 
    { 
        var links = div.Descendants("a") 
            .Select(a => a.InnerText) 
            .ToList(); 
    } 
    
    +0

    テストしましたが、選択したdivの外にあるすべてのリンクを把握していました。 – Deejdd

    +0

    @Deejdd回答を更新しました –

    +3

    ありがとうございました。十分な担当者がいないためにアップしてくれません。 – Deejdd

    3

    このXPathを使用します。

    //div[@class = 'myclass']//a 
    

    それはclass = 'myclass'div内のすべての子孫aの要素をつかみます。

    //[email protected]が正しくありません。

    +0

    また、ありがとうございます。 – Deejdd

    +0

    小さな質問ですが、これを行うことは可能ですか?// div [@class = 'half na'] 正確なクラス名がまだ分からない場合は、それを探してください。 – Deejdd

    +0

    @Deejdd、明らかにすることはできますか?あなたの例から、あなたは '@class = 'half na''を知っています。 –

    2

    使用

    //div[contains(concat(' ', @class, ' '), ' myclass ')]//a 
    

    これはclass属性"myclass"のクラス名を含む任意のdivの子孫である任意のaの要素を選択します。

    classnameは単一でも、属性には他のクラス名を含めることもできます。この場合、クラス名は最初のものか最後のものか、あるいは他のクラス名に囲まれている可能性があります。上記のXPath式は、これらの異なるケースのすべてで目的のノードを正しく選択します。

    +0

    あなたが投稿していただきありがとうございます、同じ結果を達成するために異なるテイク・オンを見て大好きです。 – Deejdd

    +0

    @Deejdd、あなたは大歓迎です。このソリューションは、他のどの回答よりも強力で適用性が高いことに気付きましたか?これは、いくつかの潜水艦の 'class'属性が' 'class =" class1 myclass class2 "' 'の形式であっても、必要なノードを選択します。 –

    関連する問題