2012-12-15 19 views
5

İçindeki tüm bağlantıları alın Bir div içinden 2 link almak istiyorum.HtmlAgilityPack DIV

Şu anda bir tane seçebilirim ama daha fazla işe yaramaz gibi görünüyor. HTML Bu parçasından almak için çalışıyorum

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."; 

: önceden

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

Herhangi bir yardım takdir, teşekkür ederiz.

+0

Deejdd, Daha birçok durumda başarıyla kullanılabilecek çok daha genel bir çözüm görmek isteyebilirsiniz. –

cevap

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

Test edildi, ama bazı reasen için seçilen div, – Deejdd

+0

@Deejdd dışında tüm bağlantıları kapmak Ben –

+3

cevabı güncelledi Ben çalıştı bir ton teşekkürler, yeterince temsilcisi olmaması nedeniyle size vesile olamaz. – Deejdd

3

bunu kullanın XPath:

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

O class = 'myclass' ile div tüm soyundan a unsurları yakalar.

Ve //[email protected] yanlış XPath.

+0

Çalışırken, teşekkürler. – Deejdd

+0

Küçük bir soru, bunu yapmak mümkün: // div [@class = 'half na'] Eğer hala aramak için sınıf adını tam olarak bilmiyorsanız. – Deejdd

+0

@Deejdd, Açıklayabilir misiniz? Örneğinizden biliyorsunuz ki '@ class = 'half na''. –

2

Kullanım:

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

Bu class özellik "myclass" bir sınıfadı içeren herhangi div soyundan olan herhangi a elemanı seçer.

Sınıf adı bekar olabilir veya öznitelik başka sınıf adları da içerebilir. Bu durumda, sınıf adı başlangıç ​​veya sonuncu olabilir veya diğer sınıf adları tarafından çevrelenebilir. Yukarıdaki XPath ifadesi, tüm bu farklı durumlarda istenen düğümleri doğru şekilde seçer.

+0

Gönderdiğiniz için teşekkür ederiz, aynı sonucu elde etmek için farklı alımları görmeyi seviyorum. – Deejdd

+0

@Deejdd, Rica ederim. Bu çözümün, cevapların geri kalanından daha güçlü ve uygulanabilir olduğunu fark ettiniz mi? Bazı dalışların 'class' özniteliği '' class =' ​​class1 myclass class2 ''biçiminde olsa bile istenen düğümleri seçer; diğer tüm cevaplar bu gibi durumlarda istenen düğümleri doğru olarak seçemez. –

İlgili konular