2013-10-23 52 views
2

什麼是正確的xpath在這裏?我試圖用HtmlUnit解析一些html,並且無法獲取特定表的行。我希望xpath通過標題元素來標識表格並返回行列表。HtmlUnit/XPath查找帶有標題的表格行

<html> 
    <table> 
    <caption>table1</caption> 
    <tr><td>cell 1.1</td><td>cell 1.2</td></tr> 
    <tr><td>cell 2.1</td><td>cell 2.2</td></tr> 
    </table> 
    <table> 
    <caption>table2</caption> 
    <tr><td>cell 1-1</td><td>cell 1-2</td></tr> 
    <tr><td>cell 2-1</td><td>cell 2-2</td></tr> 
    </table> 
</html> 

我認爲應該工作的XPath是「//標題[‘表2’] /父::表/ TR」而是一個在線測試儀結束了返回所有行兩個表中,只是一個不與目標標題。但是,然後在我自己的java測試中使用HtmlUnit返回一個空列表。該行代碼是:

final List<HtmlTableRow> domNodeList = (List<HtmlTableRow>) page.getByXPath("//caption['table2']/parent::table/tr"); 

任何幫助嗎?

回答

2

你不需要去標題才能找到表格。

//table[caption='table2']/tr 
+0

很酷 - 在在線測試器中工作,但我的HtmlUnit代碼仍然返回空列表。那裏有什麼正確的代碼(任何人)? – eflat

+1

考慮嘗試一步一步的路徑: 「// table」是否返回表列表? 「// table [caption ='table2']」是否只返回一個需要表的列表? – JustAndrei

+0

好的提示 - 您引用的兩個表格按預期工作。一旦我添加了最後的「/ tr」,它將返回null。我還沒有機會進一步排除故障,但會有點兒困難。 – eflat

1

切勿嘗試在HtmlUnit中使用XPath,方法是查看頁面的源代碼。你應該:

  1. 獲取頁面
  2. 輸出使用asXml()
  3. 基於某個

的的HtmlUnit XPath表達式的內容修改頁面的源代碼。這不僅僅是美化它,而且實際上修改它的問題。 EG:添加tbody以及許多其他更改。所以我敢打賭,這不是HtmlUnit本身的輸出。

按照前面的步驟,你應該得到它的工作。