从HTML片段中删除空标记对

Dón*_*nal 7 java html-parsing jsoup

我有一个用户提交的字符串,其中包含HTML内容

"<p></p><div></div><p>Hello<br/>world</p><p></p>"
Run Code Online (Sandbox Code Playgroud)

我想转换这个字符串,以便删除空标记对(但<br/>保留空标记).例如,此转换的结果应将上面的字符串转换为

"<p>Hello<br/>world</p>"
Run Code Online (Sandbox Code Playgroud)

我想使用JSoup来做这件事,因为我已经在我的类路径中使用了这个,并且我最容易在服务器端执行此转换.

Pri*_*osK 23

这是一个例子,就是这样(使用JSoup):

String html = "<p></p><div></div><p>Hello<br/>world</p><p></p>";
Document doc = Jsoup.parse(html);

for (Element element : doc.select("*")) {
    if (!element.hasText() && element.isBlock()) {
        element.remove();
    }
}

System.out.println(doc.body().html())
Run Code Online (Sandbox Code Playgroud)

以上代码的输出是您正在寻找的:

<p>Hello<br />world</p>
Run Code Online (Sandbox Code Playgroud)

  • 我注意到这段代码删除了div ex中的空img:<div> <img rel="nofollow noreferrer" ...> </ div>所以我也检查了空的大小:&& element.childNodes().size()== 0,我的更新正确吗? (2认同)

Tom*_*ott 8

不是很熟悉jsoup,但你可以用一个简单的正则表达式替换:

String html = "<p></p><div></div><p>Hello<br/>world</p><p></p>";
html = html.replaceAll("<([^>]*)></\\1>", "");
Run Code Online (Sandbox Code Playgroud)

虽然使用完整的解析器,您可能只是在处理期间删除空内容,具体取决于您最终将使用它做什么.

  • 这个解决方案只适用于`<p> </ p>`,而不适用于等效的`<p />`或`<p> </ p>`. (4认同)