繁体   English   中英

如何使用Jsoup删除文本级别的所有元素?

[英]How to remove all elements on text level with Jsoup?

我正在做一个项目,我只对页面布局感兴趣,而对文本不感兴趣。 我目前难以摆脱文本级的每个元素。 例如:

<div>
    <ul>
        <li>some menu item</li>
        <li>some menu item</li>
        <li>some menu item</li>
    </ul>
</div>
<div>
    <h3>Tile of some text</h3>
    <p></p>
    <p>some text</p>
    <ul>
        <li>some other text</li>
        <li>some other text</li>
        <li>some other text</li>
    </ul>
</div>

我想摆脱文本级别上的ul,li,p和h3元素,但保留div和带有菜单项的列表,因为这是页面布局的一部分。 如何使用Jsoup做到这一点?

我一直在尝试使用document.select()然后使用.remove()元素来执行此操作,但是select函数并非针对此类非标准查询。

编辑:我想要得到的最终结果是:

<div>
    <ul>
        <li>some menu item</li>
        <li>some menu item</li>
        <li>some menu item</li>
    </ul>
</div>
<div>

</div>

如您所见,当ul标签与其中包含文本的标签处于同一级别时,它将删除列表。 ul标签是页面上文本的一部分,与页面的布局无关。 带有菜单项的ul标签对于页面很重要,因为它定义了那里的菜单,并且有3个不同的项。

您可以使用标准选择并删除所有pliul元素:

doc.select("p").remove();
doc.select("ul").remove();
doc.select("li").remove();

我首先找到了要删除的标签,然后在其父标签上调用了empty()。

    public static void main(String[] args) {
        String html = "<div> <ul>  <li>some menu item</li>  <li>some menu item</li>  <li>some menu item</li> </ul></div><div> <h3>Tile of some text</h3> <p></p> <p>some text</p> <ul>  <li>some other text</li>  <li>some other text</li>  <li>some other text</li> </ul></div>";
        Document doc = Jsoup.parse(html.toString());
        Elements elements = doc.body().select("*");
        for (Element element : elements) {
            if ("h3".equals(element.tagName()) || "p".equals(element.tagName())) {
                element.parent().empty();
            }
        }
        System.out.println(doc.toString());
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM