Html Agility Pack - 遍历行和列

时间:2010-07-30 07:02:10

标签: c# asp.net html-agility-pack

如何在具有属性id或名称的表和行中循环以在每个td单元格中深入获取内部文本?我在asp.net,c#和最新的html敏捷包上工作。请指导。谢谢。

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>

2 个答案:

答案 0 :(得分:2)

您需要使用xpath选择这些节点:

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

答案 1 :(得分: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 。我怎样才能将它们分类,用空格或标签分隔?谢谢。