我想从这里获得球员名单:
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>
答案 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开始,以元素数结束。