如何在div中获取表,使用htmlagilitypack

时间:2018-04-01 19:53:10

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

有一个类似

的HTML
   <div id="info_tab_members">
        <div id="info_members" class="tabslevel">
            <ul>
                <li><a href="#info_tab_members_past">Past members</a></li>
                <li><a href="#info_tab_members_live">Live musicians</a></li> 
            </ul>

            <div id="info_tab_members_all">
                <div class="ui-tabs-panel">
                <!-- THIS TABLE I WANT -->
                <table class="display tblClass" cellpadding="0" cellspacing="0">....
                  <!-- DATA I WANT -->
                </table>
               </div>
            </div>                              

            <div id="info_tab_members_current">
                <div class="ui-tabs-panel">
                    <table class="display tblClass" cellpadding="0" cellspacing="0">        ...
                     </table>
                 </div>
            </div>      
        </div>
    </div>

如何获取ID为info_tab_members_all的div中的表格? 需要考虑的是,有几个表具有公共类display tblClass

我试过了:

首先我试着做

foreach (HtmlNode row in doc.DocumentNode.SelectNodes("table[@class='display tblClass']/tbody/tr"))
{
...
}     

但问题是我从所有display tblClass的表中获取数据   所以我试过了:

 var tbl = doc.DocumentNode.
                SelectSingleNode("//*[@id='info_tab_members_all']").
                SelectNodes("table[@class='display tblClass']/tbody/tr").
                ToList();

但我收到错误:

  

“对象引用未设置为对象的实例”

如何使用div id指定我想要的表格:'info_tab_members_all'

1 个答案:

答案 0 :(得分:0)

如果您能够使用HtmlAgilityPack.CssSelectors,那么您很幸运,

var table = htmlDoc.QuerySelectorAll("#info_tab_members_all table");
// table is `IList<HtmlNode>`

如果没有,那么你只需要正确的XPath。这里是great reference for converting CSS to XPath,反之亦然。

var table = htmlDoc.DocumentNode.SelectSingleNode("//*[@id='info_tab_members_all']/*/table")
// table is `HtmlNode`