【问题标题】:How to remove all elements on text level with Jsoup?如何使用 Jsoup 删除文本级别的所有元素?
【发布时间】:2016-12-24 03:21:50
【问题描述】:

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

<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 个不同的项。

【问题讨论】:

  • 您能否举例说明修改后的 html 应该是什么样子?

标签: java html jsoup


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我首先找到了我想要删除的标签,然后在它们的父级上调用了 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());
        }
    

    【讨论】:

    • 有没有更简洁的方式在元素中搜索文本?我不喜欢 if 语句中所有这些标签名称的外观。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2020-05-10
    • 1970-01-01
    • 2013-12-31
    • 1970-01-01
    相关资源
    最近更新 更多