2010-05-18 5 views
13

Sınıf alt ile bir sürü tr vardır. Tüm bağlantıları (ya da sonuncusu) almak istiyorum ama html çeviklik paketi ile nasıl olduğunu anlayamıyorum.html çeviklik paketi ile sınıfta Linkler alın

Ben bir varyantı denedim ama sadece tüm bağlantıları veya hiçbirini olsun. Sadece ben n.SelectNodes

html.LoadHtml(page); 
var nS = html.DocumentNode.SelectNodes("//tr[@class='alt']"); 
foreach (var n in nS) 
{ 
    var aS = n.SelectNodes("a"); 
    ... 
} 
+0

Eğer ayrıştırmak için çalışıyoruz html pasajı gösterebilir? – jaltiere

+0

Jaltiere: CSS seçicisi 'tr.alt a' istiyor. – SLaks

cevap

15
kullanabilirsiniz

LINQ yazıyorum çünkü hiç mantıklı düğümünde bir tane almak O görünmüyor:

var links = html.DocumentNode 
      .Descendants("tr") 
      .Where(tr => tr.GetAttributeValue("class", "").Contains("alt")) 
      .SelectMany(tr => tr.Descendants("a")) 
      .ToArray(); 

Not Bu da <tr class="Malto"> maç olacak; Contains çağrısını normal ifadeyle değiştirmek isteyebilirsiniz.

Ayrıca Fizzler kullanabilirsiniz: iki yöntem de linkler olmayan çapa döneceğini

html.DocumentNode.QuerySelectorAll("tr.alt a"); 

Not.

11

Neden tek sorguda tüm bağlantıları seçmek değil:

html.LoadHtml(page); 
var nS = html.DocumentNode.SelectNodes("//tr[@class='alt']//a"); 
foreach(HtmlNode linkNode in nS) 
{ 
//do something 
} 

O html süreyle geçerli olacaktır:

<table> 
<tr class = "alt"> 
<td><'a href="link.html">Some Link</a></td> 
</tr> 
</table>