C#HtmlAgilityPack从特定的h2中选择表

Lux*_*uxC 6 html c# parsing html-agility-pack

我有一些HTML:

<h2>Results</h2>
 <div class="box">
 <table class="tFormat">
      <th>Head</th>
      <tr>1</tr>
 </table>
</div>

<h2>Grades</h2>
 <div class="box">
 <table class="tFormat">
      <th>Head</th>
      <tr>1</tr>
 </table>
</div>
Run Code Online (Sandbox Code Playgroud)

我想知道如何在"结果"下获得该表

我试过了:

        var nodes = doc.DocumentNode.SelectNodes("//h2");

        foreach (var o in nodes)
        {
            if (o.InnerText.Equals("Results"))
            {
                foreach (var c in o.SelectNodes("//table"))
                {
                    Console.WriteLine(c.InnerText);             
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

它可以工作,但它也获得了Grades h2下的表格

Kob*_*obi 5

请注意,div在标题内不是分层次的,因此在那里查找它没有意义.

这可以为你工作 - 它找到标题后面的下一个元素:

if (o.InnerText.Equals("Results"))
{
    var nextDiv = o.NextSibling;
    while (nextDiv != null && nextDiv.NodeType != HtmlNodeType.Element)
        nextDiv = nextDiv.NextSibling;
    // nextDiv should be correct here.
}
Run Code Online (Sandbox Code Playgroud)

您还可以编写更具体的xpath来查找该div:

doc.DocumentNode.SelectNodes("//h2[text()='Results']/following-sibling::div[1]");
Run Code Online (Sandbox Code Playgroud)