如何在 Jsoup 中获取 h2 标签之间和之后的所有 p 标签

How to get all p tags between and after h2 tags in Jsoup

提问人:Stɑrry Shivɑm 提问时间:2/14/2023 最后编辑:MioStɑrry Shivɑm 更新时间:2/14/2023 访问量:63

问:

我有这样的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()

Java jsoup HTML 解析

评论


答:

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]