提问人:Stɑrry Shivɑm 提问时间:2/14/2023 最后编辑:MioStɑrry Shivɑm 更新时间:2/14/2023 访问量:63
如何在 Jsoup 中获取 h2 标签之间和之后的所有 p 标签
How to get all p tags between and after h2 tags in Jsoup
问:
我有这样的HTML
<h2 id="17273">bla bla bla 1</h2>
<p>Text i need</p>
<p>Text i need</p>
<p>Text i need</p>
<h2 id="45626">bla bla bla 2</h2>
<p>Text i need</p>
<p>Text i need</p>
<p>Text i need</p>
<h2 id="78519">bla bla bla 3</h2>
<p>Text i need</p>
<p>Text i need</p>
<h2 id="72725">bla bla bla 2</h2>
<p>Text i need</p>
<p>Text i need</p>
我想提取 h2 标签之后/之间的所有 p 标签,并将其与上面的 h2 标签进行映射,如下所示:
[(h2 with id 17273 = all p tags below it), (h2 with id 45626 = all p tags below it)]
老实说,我不知道如何实现这一点,我尝试过一些类似的事情,但我无法实现这样的事情。doc.siblingElements()
答:
0赞
Mio
2/14/2023
#1
由于 < h2 > 和 < p > 标签没有以任何方式链接,因此您可以使用正则表达式人为地在它们之间创建依赖关系:
String x = html //your html String
.replaceAll("</p>\\s+<h2", "</p></parent>\n<h2")
.replaceAll("<h2", "<parent><h2")
+ "</parent>";
那么使用 Jsoup 就比较简单了:
Document doc = Jsoup.parse(x);
Elements parents = doc.getElementsByTag("parent");
for (Element e : parents) {
Elements h2 = e.getElementsByAttribute("id");
String id = h2.attr("id");
Elements pElements = e.getElementsByTag("p");
List<String> pList = new ArrayList<>();
for (Element p : pElements)
pList.add(p.text());
System.out.println("h2 with id " + id + " = " + pList);
}
收到的输出:
h2 with id 17273 = [1 Text i need, 1 Text i need, 1 Text i need]
h2 with id 45626 = [2 Text i need, 2 Text i need, 2 Text i need]
h2 with id 78519 = [3 Text i need, 3 Text i need]
h2 with id 72725 = [4 Text i need, 4 Text i need]
评论