【问题标题】:How do I select the NEXT <td> element?如何选择下一个 <td> 元素?
【发布时间】:2023-03-25 13:52:01
【问题描述】:

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

一旦我有了表格的 InnerHtml,我计划寻找一个内部文本值为“Field #2”的&lt;td&gt;,例如。但是,然后,我需要选择 NEXT &lt;td&gt; 的内部文本。在本例中,我需要值 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>

【问题讨论】:

    标签: c# .net-4.0 html-parsing html-agility-pack


    【解决方案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(); 
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 几乎正确,需要有一个'.'在'/strong/'之前和'following-sibling'之后必须有两个':'。然后它就可以正常工作了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-16
      • 1970-01-01
      • 2012-03-15
      • 2012-06-13
      • 2011-07-04
      相关资源
      最近更新 更多