# htmllagilitypack选择表从特定的h2

本文关键字:h2 htmllagilitypack 选择 | 更新日期: 2023-09-27 17:49:29

我有一些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>

我想知道如何得到"结果"下的表

我试过:

        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);             
                }
            }
        }

它工作,但它也得到表下的等级h2

# htmllagilitypack选择表从特定的h2

注意,div并不是在header的层次结构中,所以在那里查找它是没有意义的。

这可以为您工作-它查找标题后的下一个元素:

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

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

doc.DocumentNode.SelectNodes("//h2[text()='Results']/following-sibling::div[1]");
 var nodes = doc.DocumentNode.SelectNodes("//h2");
        if (nodes.FirstOrDefault()!=null)
        {
            var o=nodes.FirstOrDefault();
            if (o.InnerText.Equals("Results"))
            {
                foreach (var c in o.SelectNodes("//table"))
                {
                    Console.WriteLine(c.InnerText);             
                }
            }
        }