2013-10-14 121 views
1

我正在使用HtmlUnit來解析java中的HTML pae,我想從頁面獲取所有表格,然後爲每個表格找到5個以前的兄弟。 這是我如何頁面解析表:如何查找元素的前N個兄弟元素

List<HtmlTable> tables = (List<HtmlTable>) page.getByXPath("//table");    
     if(tables!=null && tables.size()>0) { 
        for(int k=tables.size()-1; k>=0; k--) { 
        for (HtmlTableRow row : tables.get(k).getRows()) { 
         List<HtmlTableCell> tds = row.getCells(); 
                     } 
                 } 
              }  

因此,如果一個表是這樣的:

<p></p> 
<p></p> 
<div></div> 
<table> 
. 
. 
</table> 

我需要得到<div>和兩個<p>元素。

JSoup似乎有一個兄弟的方法http://jsoup.org/apidocs/org/jsoup/nodes/Element.html#previousElementSibling%28%29,無法在HtmlUnit中找到任何這樣的事情。

回答

2

只需要用一個更合適的XPath表達:

//table/preceding-sibling::*[position()<=3] 

鑑於

<html> 
    <p/> 
    <p/> 
    <div/> 
    <table> 
    <tr> 
     <td>sdf</td> 
    </tr> 
    </table> 
</html> 

這將返回:

<p/> 
    <p/> 
    <div/> 

測試它here

然後你只需遍歷的最簡單的方法的結果。