【发布时间】:2018-04-18 20:07:28
【问题描述】:
我有一个包含多个层次的巨大目录:
我需要对其进行编辑并仅保留 Level1 和 Level2 的元素并删除其他所有内容,如:
为此我使用 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 很好,但不幸的是对我不起作用。
【问题讨论】:
-
您的示例是输入。你能告诉我们你想从这个输入中产生什么输出吗?在我看来,级别 1 是两个列表项,级别 2 是四个列表项。您是否能够修改 HTML 以添加
<li class="level2">?这将简化 Jsoup 选择器。 -
@ThisClark 谢谢你的评论,我更新了这个问题。问题是所有
lis 和uls 都没有类。 -
好的,我知道您期望的输出是修改后的 HTML,与您的第二个屏幕截图完全相同。对吗?
-
我想这是我最后一个问题了——既然你是用Java写的,最后你想得到什么数据类型?您想要 HTML 的
String、修改后的 HTML 的 JsoupDocument还是Elements的集合? -
@ThisClark 这是正确的,我希望修改后的 HTML,如第二张图片所示。我想获得 HTML 的
String,因为我还想用新的目录替换目录。