1

我正在尝试使用 HTML Agility Pack 解析一些 HTML。以下代码片段选择包含我需要的信息的表格元素,但我需要更深入地挖掘表格。

例如,一旦我有了表格的 InnerHtml,我计划寻找一个<td>内部文本值为“字段 #2”的值。但是,然后,我需要选择 NEXT 的内部文本<td>。在本例中,我需要值 110。我怎么做?

foreach (var x in doc.DocumentNode.SelectNodes("//table[contains(@class,'data')]"))
{
     // psuedo code - search for td and use "contains" on the inner text / html.
     // Then, grab the next td inner html.

     Console.WriteLine(x.InnerHtml);
}


  <tr>
    <td width="158"><strong>Field #1:</strong></td>
    <td  width="99">1</td>
    <td  width="119"><strong>Field #2:</strong></td>
    <td  width="176">110</td>
  </tr>
  <tr>
    <td width="158"><strong>Field #3:</strong></td>
    <td  width="99">85</td>
    <td  width="119"><strong>Field #4:</strong></td>
    <td  width="176">-259.34</td>
  </tr>
  <tr>
    <td width="158"><strong>Field #5:</strong></td>
    <td  width="99">1</td>
    <td  width="119"><strong>Field #6:</strong></td>
    <td  width="176">110</td>
  </tr>
  <tr>
    <td width="158"><strong>Field #7:</strong></td>
    <td  width="99">12</td>
    <td  width="119"><strong>Field #8:</strong></td>
    <td  width="176">123.23</td>
  </tr>
4

2 回答 2

1

不确定敏捷包是否支持它,但在 XPath 中,您可以使用以下命令查询下一个兄弟/following-sibling

doc.DocumentNode.SelectNodes(
    "//table[contains(@class,'data')]/tr/" +
       "td[/strong/text()='Field #2:']" + 
       "/following-sibling:td");

本质上 - 找到td具有给定文本的所有节点,并给我它的下一个兄弟td节点。

于 2012-10-03T02:53:06.340 回答
1

这段代码将返回您想要的 td 行。

//<td  width="176">110</td>
var td = x.SelectNodes("//td").SkipWhile(g => !g.InnerText.Contains("Field #2:")).Select(s => s).Skip(1).FirstOrDefault(); 
于 2012-10-03T03:38:29.890 回答