Проблемы с XPath / HTMLAgilityPack - PullRequest
0 голосов
/ 11 июня 2011

Я хочу получить списки игроков здесь:

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 s из всех тел таблицы, а не только из первого.Кто-нибудь знает почему?

У меня также возникают проблемы при получении данных из второй таблицы (на самом деле это таблица № 3 в источнике, поскольку есть таблицы 2 и 4, которые невидимы в представлении по умолчанию).Когда я выбираю "//table[@class='sortable stats_table']", он показывает, что есть четыре таблицы, но когда я делаю "//table[@class='sortable stats_table'][3]", он ничего не находит (я получаю исключение для несвязанного объекта, когда пытаюсь использовать результат. Почему это так?

1 Ответ

2 голосов
/ 11 июня 2011

, потому что 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 и заканчивается на количестве элементов.

...