【问题标题】:C# HtmlAgilityPack Select table from specific h2C# HtmlAgilityPack 从特定 h2 中选择表
【发布时间】:2012-12-12 00:28:20
【问题描述】:

我有一些 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 下的表格

【问题讨论】:

    标签: c# html parsing html-agility-pack


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

    【讨论】:

      【解决方案2】:

      请注意,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.
      }
      

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

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

      【讨论】:

      • 至于o.SelectNodes:我希望它可以根据dom层次结构工作,但实际上它会在根文档中再次搜索——这就是你得到2个&lt;div&gt;s的原因.我以前看过那个:stackoverflow.com/questions/2875347/#comment2922368_2876384
      • 哦,如果有人想运行代码,它只是缺少几行:HtmlWeb web = new HtmlWeb(); var doc = web.Load("http://jsbin.com/exegog/2");
      猜你喜欢
      • 2012-01-27
      • 1970-01-01
      • 1970-01-01
      • 2014-09-04
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多