2010-07-30 88 views
1

如何循環遍歷具有屬性ID或名稱的表和行以在每個td單元格內深入內部文本?我從事asp.net,c#和最新的html敏捷性軟件包。請指導。謝謝。Html Agility Pack - 循環遍歷行和列

一個html文件有幾個表。其中一個有一個屬性id = main-part。在該識別的表格中,有很多行。其中一些行具有相同的屬性name = display。在那些命名行中,有很多列我必須從中提取文本。事情是這樣的:

<body> 
<table> 
... 
</table> 
<table> 
... 
</table> 

<table id="main-part"> 
    <tr> 
    <td></td> 
    ... 
    </tr> 
    <tr> 
    <td></td> 
    ... 
    </tr> 
    <tr name="display"> 
    <td>Jan</td> 
    <td>Feb</td> 
    <td>Mar</td> 
    ... 
    </tr> 
     <tr name="display"> 
    <td>Apr</td> 
    <td>May</td> 
    <td>June</td> 
    ... 
    </tr> 
     <tr name="display"> 
    <td>Jul</td> 
    <td>Aug</td> 
    <td>Sep</td> 
    ... 
    </tr> 
    <tr> 
    <td></td> 
    ... 
    </tr> 
    <tr name="display"> 
    <td>Oct</td> 
    <td>Nov</td> 
    <td>Dec</td> 
    ... 
    </tr> 
    <tr> 
    <td></td> 
    ... 
    </tr> 
</table> 
<table> 
... 
</table> 
</body> 
+0

請參閱此鏈接。如何使用htmlagility包.. [點擊這裏](http://forums.asp.net/t/1508198.aspx?PageIndex=2) – 2010-07-30 07:53:29

+0

我跟着鏈接,那裏是有趣的事情。謝謝。 – David 2010-07-30 08:38:12

回答

2

您需要使用XPath來選擇這些節點:

foreach(HtmlNode cell in doc.DocumentElement.SelectNodes("//tr[@name='display']/td") 
{ 
    // get cell data 
} 
+0

謝謝你的幫助。 對於我得到的新包,我使用DocumentNode代替DocumentElement。 – David 2010-07-30 08:36:16

1

它的工作!非常感謝Oded。

HtmlDocument doc = new HtmlDocument(); 
     doc.Load(@"C:/samplefolder/sample.htm"); 
foreach(HtmlNode cell in doc.DocumentNode.SelectNodes("//tr[@name='display']/td")) 
{ 
     string test = cell.InnerText; 
     Response.Write(test); 
} 

這表明像JanFebMarAprMayJuneJulAugSepOctNovDec結果。我怎樣才能把它們分開,用空格或製表符分開?謝謝。

+0

也許這應該是一個新問題?無論如何,當你做一個'Response.Write'時,你可以在最後加上逗號 - Response.Write(test +「,」);' – Oded 2010-07-30 08:40:19

+0

你應該加註並接受答案,如果他們確實有幫助的話。查看FAQ - http://stackoverflow.com/faq – Oded 2010-07-30 08:44:58

+0

只需使用Response.WriteLine(test); INSTEAD OF Response.Write(test);並在結束時做一個Response.ReadLine();所以你可以看到它,並按下[Enter]退出屏幕之前確認它是否符合你的期望。 – 2010-08-12 06:51:09