извлечение абзаца перед каждой таблицей html с использованием jsoup

У меня есть требование, когда я должен извлечь абзац непосредственно перед каждой таблицей вместе с содержимым таблицы с веб-сайта.

я могу легко извлекать данные таблицы с помощью jsoup, но не могу извлечь абзац, который происходит точно перед таблицей. я пробовал следующие вещи: -

1. doc.select("p") but its giving extra values because some text in table columns are also in <p> tag.
2. getElementsByTag  but no luck.

образец таблицы:

<p>
<a id="table heading" name="table name"></a>
<b>Sports equipments</b>
</p>
 <table width="98%" cellpadding="0" border="1">
 <tbody>
 <tr valign="top" bgcolor="#ffffcc" align="left">
<th width="25%" scope="col">Company</th>
<th width="25%" scope="col">Product</th>
<th width="20%" scope="col">Availability</th>
<th width="55%" scope="col">Related Information</th>
 <th width="20%" scope="col">
</tr>
<tr>
<td width="18%" valign="top" rowspan="2">
<div>
Nike
<br>
1-800-545-8800
<br>
<br>
<br>
</div>
</td>
<td width="10%" valign="top">
<div>sports kit</div>
</td>
<td width="15%" valign="top" rowspan="2">
<div>Available</div>
</td>
<td width="24%" valign="top" rowspan="2">
<div>Product is available and shipping.</div>
</td>
<td width="16%" valign="top" rowspan="2">Demand increase.</td>
<td width="12%" valign="top" rowspan="2">
<div>
<div>3/26/2014</div>
</td>
</tr>
</table>

я должен извлечь:

<b>Sports equipments</b> 

вместе с содержимым таблицы


person OneUser    schedule 23.04.2014    source источник


Ответы (1)


Вы можете расширить свой селектор до этого: "p > b".

Поскольку у меня нет вашего полного html, трудно сказать, будет ли он там работать, но для вашего примера это работает:

    final String html = ... // the html of your example
    Document doc = Jsoup.parse(html);

    /*
     * Selects b-tags, that are direct childs of p-tags.
     */
    for( Element element : doc.select("p > b") )
    {
        System.out.println(element);
    }

Это печатает:

<b>Sports equipments</b>
person ollo    schedule 23.04.2014
comment
спасибо, это работает, и я также нашел один альтернативный способ - person OneUser; 24.04.2014
comment
Документ документа = Jsoup.connect(html).get(); Таблица элементов = doc.select(table”); for (int i = 0; i ‹ table.size(); i++) { Element tablevalue = table.get(i); Элемент para = tablevalue.previousElementSibling(); System.out.println(para.text()); } - person OneUser; 24.04.2014