【问题标题】:How to find previous N siblings of an element如何找到一个元素的前 N ​​个兄弟姐妹
【发布时间】:2013-10-22 05:25:38
【问题描述】:

我正在使用 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>

我需要得到&lt;div&gt; 和两个&lt;p&gt; 元素。

JSoup 似乎有兄弟http://jsoup.org/apidocs/org/jsoup/nodes/Element.html#previousElementSibling%28%29 的方法,在 HtmlUnit 中找不到类似的东西。

【问题讨论】:

    标签: java html xpath html-parsing htmlunit


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      给定

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

      这将返回:

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

      测试它here

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

      【讨论】:

        猜你喜欢
        • 2014-07-12
        • 2012-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多