gpt4 book ai didi

java - 如何用Jsoup只获取n层元素?

转载 作者:行者123 更新时间:2023-11-30 06:12:36 24 4
gpt4 key购买 nike

我有一个巨大的多层内容表:

enter image description here

我需要编辑它并仅保留 Level1Level2 的元素并删除其他所有内容,如下所示:

enter image description here

因此我使用 Jsoup:

File in = new File(INPUT_FILE_PATH);
Document origDoc = Jsoup.parse(in, null);
Elements toc = origDoc.getElementsByClass("toc");
Elements firstLevelChildElements = toc.select("ul");

然后我想到分析元素,如果该元素只有一个父元素 - 保留它,否则删除它。

但问题是 firstLevelChildElements 选择第一个 ul 及其所有子元素。当我尝试选择下一个子元素时,也会发生同样的情况。我不能只有所有元素的列表(或树)。

示例 HTML 代码是:

<ul class="toc">
<li>
<a href="#toc_20">Level 1</a>
<ul>
<li>
<a href="#toc_21">Level 2</a>
<ul>
<li>
<a href="#toc_22">Level 3</a>
</li>
</ul>
</li>
<li>
<a href="#toc_28">Level 2</a>
</li>
<li>
<a href="#toc_29">Level 2</a>
</li>
</ul>
</li>
<li>
<a href="#toc_20">Level 1</a>
<ul>
<li>
<a href="#toc_21">Level 2</a>
<ul>
<li>
<a href="#toc_22">Level 3</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>

This answer很好,但不幸的是对我不起作用。

最佳答案

使用 Jsoup 你可以操作 dom。选择所有不需要的元素并清空它们的 html。您可以使用 css 选择器来执行此操作:

    Document doc = Jsoup.parse(html);
for (Element e : doc.select("ul > li > ul > li > ul")) {
e.html("");
}

或更一般地选择具有 toc 类的 ul 元素的所有四阶子元素:

    Document doc = Jsoup.parse(html);
for (Element e : doc.select("ul.toc > * > * > * > * > *")) {
e.html("");
}

然后从修改后的文档中选择所需的元素。

有关 CSS 选择器的更多信息:

https://www.w3schools.com/cssref/css_selectors.asp

https://jsoup.org/cookbook/extracting-data/selector-syntax

关于java - 如何用Jsoup只获取n层元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49908206/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com