1

我正在使用 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 中找到类似的东西。

4

2 回答 2

2

里面也有很多功能HtmlUnitHtmlUnit从在线文档中检查以下内容:

  1. getPrentNode()
  2. getChildElements()
  3. getPreviousSibling()getPreviousElementSibling()

尝试使用它来获得您想要实现的目标。

于 2013-10-14T15:54:05.663 回答
2

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

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

给定

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

这将返回:

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

在这里测试一下。

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

于 2013-10-14T16:02:06.907 回答