如何在jsoup / javascript中

时间:2017-07-13 12:53:24

标签: javascript html tags jsoup

<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”只能检索一个元素,如何获取所有元素,直到遇到另一个“强”? 感谢

1 个答案:

答案 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));
}