2013-03-16 13 views
5

ile alın HTMLAgilityPack ile bir id özniteliğine sahip bir td'nin iç metnini seçmeye çalışıyorum.HTMLAgilityPack bir td etiketinin iç öznitelik değerini

Html Kod:

<td id="header1"> 5 </td> 
<td id="header2"> 8:39pm </td> 
<td id="header3"> 8:58pm </td> 
... 

Kodu:

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 

doc.LoadHtml(data); 

var nodes = doc.DocumentNode.SelectNodes("//td[@id='header1']"); 

if (nodes != null) 
{ 
    foreach (HtmlAgilityPack.HtmlNode node in nodes) 
    { 
     MessageBox.Show(node.InnerText); 
    } 
} 
Ben doğru td etiketi seçerek değilim çünkü boş düğümleri almaya devam ama yanlış yaptıklarını bilemiyorum

...

Düzenleme:

Ben header1 ve header2 ile bir hata yaptım, ama 5 d vardır ifferent td etiketleri 1'den 5'e kadar.

+1

Eğer bu kimlikleri kontrol ettin ha ve alındı. '' ve ** '(// td [@ id = 'header1'"); '** –

+1

html'den alınıyorsanız, id kodu kod içinde iken header2'dir. 'header1' olarak belirtilir –

+0

Kodunuz doğru görünüyor Verilerinizi bir yere gönderebilir misiniz? –

cevap

6

header1'u seçmeye çalışıyorsunuz ancak kimlik header2.

Ayrıca doğrudan GetElementById kullanabilirsiniz:

var td = doc.GetElementbyId("header2"); 
1

Hmm .. Ben yanlış bir şey yaptığını sanmıyorum. Kodunuz id="header1" ile sadece <td> vermelidir. Eğer varsa, header5 için header1 den, yapabileceğiniz diyelim:

for (int i = 1; i <= 5; i++) { 
    var tdNode = doc.DocumentNode.SelectSingleNode(string.Format("//td[@id='header{0}']", i)); 

    //do something with the node here 
} 

Sana null alıyoruz neden söyleyebilirim böylece, tüm kod gönderme önermek rağmen, hem de daha iyi bir yol .. //tr[@id='some-id']//td[contains(@id, 'header')] gibi (örneğin bir şey yukarıdaki döngü yapmadan <td> düğümleri ayrıştırma

0

sen innerHTML özelliğini Beğen kullanarak sorunu çözebilir:

var td = doc.GetElementbyId("header2").InnerHtml;