如何找到元素的前N个兄弟

时间:2013-10-14 15:28:29

标签: java html xpath html-parsing htmlunit

我正在使用HtmlUnit来解析java中的HTML pae,我希望从页面中获取所有表,然后为每个表找到5个以前的兄弟。 这就是我在页面中解析表的方法:

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 个答案:

答案 0 :(得分:2)

HtmlUnit中也有很多功能可用。检查在线HtmlUnit文档中的以下内容:

  1. getPrentNode()
  2. getChildElements()
  3. getPreviousSibling()getPreviousElementSibling()
  4. 尝试使用此功能,以获得您想要实现的目标。

答案 1 :(得分:2)

只需使用更合适的XPath表达式:

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

鉴于

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

这将返回:

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

测试here

然后,您只需以最简单的方式迭代结果。

相关问题