XPath / HTMLAgilityPack问题

时间:2011-06-11 14:29:50

标签: c# xpath html-agility-pack

我想从这里获得球员名单:

http://www.basketball-reference.com/boxscores/201105090BOS.html

为了对第一个表执行此操作,我使用以下内容:

HtmlNode reboundsNode = doc.DocumentNode.SelectSingleNode("//table[@class='sortable stats_table']/tbody[1]");
    foreach(HtmlNode node in reboundsNode.SelectNodes("tr"))
    {
        // Get the 'td's.
    }

我不得不将它分成两行,因为"//table[@class='sortable stats_table']/tbody[1]/tr"从所有表体中选择tr而不是第一个。有谁知道为什么?

从第二个表中获取数据时也遇到问题(实际上源表中的表号为3,因为表2和4在默认视图中是不可见的)。当我选择"//table[@class='sortable stats_table']"时,它显示有四个表,但是当我执行"//table[@class='sortable stats_table'][3]"时,它什么也找不到(当我尝试使用结果时,我得到一个未绑定的对象异常。为什么会这样? / p>

1 个答案:

答案 0 :(得分:2)

因为XPath []不是一个表体,而是条件,所以1意味着总是如此 - 试试这个 - 它将从第一个tbody中选择

 //table[@class='sortable stats_table']/tbody[position() = 1]/tr

第二个问题

 //table[@class='sortable stats_table'][3]

这是无效的xpath - 写这个的正确方法是

 //table[@class='sortable stats_table' and position() = 3]

注意:位置从1开始,而不是从0开始,以元素数结束。