我有一个包含多个图层的巨大内容表:
我需要对其进行编辑并仅保留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
及其所有子项。当我尝试选择nexts子元素时也会发生同样的情况。我不能只拥有所有元素的列表(或树)。
示例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很不错,但遗憾的是对我不起作用。
答案 0 :(得分:1)
使用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选择器的更多信息: