2011-06-11 118 views
0

我想從這裏得到的球員名單:的XPath/HTMLAgilityPack問題

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]"時,它找不到任何東西(當我嘗試使用結果時,我得到一個未綁定的對象異常。爲什麼?

回答

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開始,以元素計數結束。

+0

奇怪。那麼爲什麼[N]符號爲我多種其他表達方式? – Hui 2011-06-11 15:44:58

+0

我不知道(也許有些MS選項等等),但它對XPath無效,它對於JavaScript,C,PHP有效...... – SergeS 2011-06-12 12:51:31

+0

[N]子標記確實對XPath有效,例如, 'para [1]選擇上下文節點的第一個子節點「請參閱 http://www.w3.org/TR/xpath/#path-abbrev – agentnega 2013-02-25 22:26:56