2014-02-19 74 views
2

我有一張如下表。我想要取消該表中每行的第一列和第四列。用hlmlagility pack報廢表數據

enter image description here

表的結構是這樣的:

enter image description here

有每個數據

我想是這樣的b標籤。但是,我沒有獲得我的結果

HtmlWeb web = new HtmlWeb(); 
HtmlAgilityPack.HtmlDocument doc = web.Load("http://www.islam4you.info/contents/names/ma.php"); 
HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//b"); 


double k = 5; 

try 
{ 
    foreach (HtmlNode n in nodes) 
    { 

     if (k != 0) 
     { 
      if ((k % 5) == 1) 
      { 
       link = n.InnerHtml; 
       nam_list.Add(link); 
      } 

      if ((k % 5) == 4) 
      { 

       link = n.InnerHtml; 
       meng_list.Add(link); 
      } 
     } 
     k++; 
     } 
    } 
    catch (NullReferenceException) 
    { 
     MessageBox.Show("No link found"); 
    } 

我如何獲得第一列的,並從該表第4列的數據???

+0

請,不包括有關在問題的標題使用,除非它不會沒有很有意義語言信息。標籤用於此目的。 –

回答

0

這可能聽起來有點矯枉過正,但我​​認爲在這種情況下使用庫會更好。這對維護來說更好。

退房它使用多麼容易CsQuery

[TestFixture] 
public class HtmlParse 
{ 
    [Test] 
    public void Test() 
    { 

     var dom = 
      CQ.Create(
       @"<table><tbody> <tr><td><b>Aadam</b></td></tr> <tr><td></td></tr> <tr><td></td></tr> <tr><td></td></tr> <tr><td><b>Earth</b></td></tr></tbody></table>"); 

     var results = dom["table tr:nth-child(1) b, table tr:nth-child(5) b"]; 

     foreach (var result in results) 
     { 
      Console.WriteLine(result.InnerText); 
     } 
    } 

} 
0
var table = doc.DocumentNode.SelectNodes("//table[@bordercolor='#111111'][1]") 
       .Descendants("tr") 
       .Select(tr => tr.Descendants("td").Select(td => td.InnerText).ToList()) 
       .Where(x => x.Count() == 5) 
       .ToList();