XPath/HTMLAgilityPack 问题

发布于 2024-11-15 03:21:33 字数 807 浏览 3 评论 0原文

我想从这里获取球员列表:

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]",它什么也没找到(当我尝试使用结果时,出现未绑定对象异常。这是为什么?

I want to get player lists from here:

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

To do that for the first table, I use the following:

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

I had to split it into two lines, because "//table[@class='sortable stats_table']/tbody[1]/tr" selected trs from all of the table bodies instead of just the first one. Does anyone know why?

I also have problems when getting the data from the second table (actually table number 3 in the source since there are tables 2 and 4 that are invisible in the default view). When I select "//table[@class='sortable stats_table']", it shows that there are four tables, but when I do "//table[@class='sortable stats_table'][3]", it finds nothing (I get an unbound object exception when I try to use the result. Why is that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

南街九尾狐 2024-11-22 03:21:33

因为 XPath [] 不是表体的数字,而是条件,所以 1 意味着总是 true - 尝试这个 - 它将从第一个 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 开始,到元素计数结束。

because XPath [] is not a number of table body, but condition , so 1 mean always true - try this - it will select from first tbody

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

Second question

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

This is invalid xpath - correct way to write this is

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

Note: position starts from 1 not from 0 and ends at elements count.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文