/ / Як знайти попередніх N братів і сестер елемента - java, html, xpath, html-parsing, htmlunit

Як знайти попередніх N братів і сестер елемента - java, html, xpath, html-parsing, htmlunit

Я використовую HtmlUnit для розбору HTML pae в java, я хочу отримати всі таблиці з сторінки, а потім знайти 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 для відповіді № 1

Є багато функцій, доступних у HtmlUnit теж. Перевірте наступні в Інтернеті HtmlUnit документація:

  1. getPrentNode ()
  2. getChildElements ()
  3. getPreviousSibling () або getPreviousElementSibling ()

Спробуйте скористатися цим, щоб отримати те, що ви намагаєтеся досягти.


2 для відповіді № 2

Просто скористайтеся більш підходящим XPath вираз:

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

Дано

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

Це повернеться:

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

Перевірте це тут.

Тоді ви просто перебираєте результати найпростішим способом.