Html Agility Pack:如何抓文本?

时间:2014-05-09 18:37:11

标签: html web-scraping html-agility-pack

<tr id='tr1' align='center' border=0 class='headerclass'>
  Example text
  <tr id='tr11' align='center' border=0 bgColor='99ccff'> 
    <td id='td1' class='headerclass'>Example Header 1 </td>
    <td id='td2' class='headerclass'>Example Header 2 </td>
    <td id='td3' class='headerclass'>Example Header 3 </td>
  </tr>
  <tr id='tr12' align='center"'bgColor='white'>
    <td id='v1' class='colclass'>value 1</td>
    <td id='v2' class='colclass'>value 2</td>
    <td id='v3' class='colclass'>value 3</td>
  </tr>
</tr>

以上是我想要抓取的HTML示例。我想获得<tr></tr>中的示例文本。我尝试使用 InnerText (代码如下所示)但它返回<td></td>中的所有文本,这不是我想要的。我想只获得示例文本

var nodes = htmlDoc.DocumentNode.SelectNodes("//tr").Where(x => x.Attributes["id"] != null && x.Attributes["id"].Value.Contains("tr1"));
foreach (var htmlNode in nodes)
{
   Console.WriteLine(htmlNode.InnerText);
}

输出:

Example text
Example Header 1
Example Header 2
Example Header 3 
value 1
value 2
value 3

谢谢。

1 个答案:

答案 0 :(得分:1)

你可以这样做:

var text = doc.DocumentNode.Descendants("tr")
               .First(p => p.Attributes["id"] != null &&   
               p.Attributes["id"].Value.Contains("tr1")).ChildNodes[0].InnerText.Trim();

输出结果为:

Example text