<p><strong>Chapter One</strong></p><p>A piece of computer code</p>
<table>
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Age</th>
</tr>
<tr>
<td>Jill</td>
<td>Smith</td>
<td>50</td>
</tr>
</table>
<p><strong>Chapter Two</strong></p><p>Java in 10 minutes</p>
如何获得这两个“强”之间的内容所以我可以得到第一章将有“一块计算机代码”和表? nextsibling()的“strong”只能检索一个元素,如何获取所有元素,直到遇到另一个“强”? 感谢
答案 0 :(得分:1)
这种格式是否一致?如果是这样,您只需向强元素父母(p)查询nextSibling
两次。
如果它发生变化,您可能需要手动检查何时停止迭代兄弟姐妹,例如验证兄弟姐妹是否包含强元素。
这一切都取决于完整的背景。
以下是基本循环的示例。在不同的情况下,您可能希望添加更多检查或更好的查询。
Document doc = Jsoup.connect(url).get();
List<Elements> data = new ArrayList<>();
Elements chapters = doc.select("p > strong");
for (Element chapter : chapters) {
if (!chapter.ownText().toLowerCase().contains("chapter"))
continue; //we've reached a strong element that isn't actually a chapter
List<Element> siblings = new ArrayList<>();
Element next = chapter.nextElementSibling();
while (next != null) {
if (next.ownText().toLowerCase().contains("chapter"))
break; //we've reached the end of this chapter
siblings.add(next);
next = next.nextElementSibling();
}
data.add(new Elements(siblings));
}