从HTML片段中删除空标记对

时间:2012-01-03 10:44:17

标签: java html-parsing jsoup

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

"<p></p><div></div><p>Hello<br/>world</p><p></p>"

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

"<p>Hello<br/>world</p>"

我想使用JSoup来实现这一点,因为我已经在我的类路径中使用了这个,并且对我来说最容易在服务器端执行此转换。

5 个答案:

答案 0 :(得分: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())

上面代码的输出就是你要找的:

<p>Hello<br />world</p>

答案 1 :(得分:8)

对jsoup并不熟悉,但你可以通过一个简单的正则表达替换来实现:

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

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

答案 2 :(得分:1)

Jsoup将从用户输入的HTML中生成正确的XML。使用XML解析器查找并删除所有空标记。我认为这比regexp更好。看这里:Java Remove empty XML tags 您还可以使用JSoup为您查找空标签。看这里:http://jsoup.org/cookbook/extracting-data/selector-syntax 并使用Node.remove()方法。

答案 3 :(得分:0)

如果你正在使用jquery,你可以像

那样做
var tags = "<p></p><div></div><p>Hello<br/>world</p><p></p>";

$("<div id='mydiv'>"+tags+"</div>").appendTo($('body'));
$('#mydiv').children().each(function(){
    var elem = $(this);
    if(elem.html() === "") elem.remove();
});

小提琴:http://jsfiddle.net/LqCx5/2/

答案 4 :(得分:-2)

不知道Jsoup,下面的代码也适用于简单的javascript正则表达式。 尝试以下代码。

function removeall(){
var tagarray=new Array("<p>","<div>");
source="<p></p><div></div><p>Hello<br/>world</p><p></p>";
for ( var int = 0; int < tagarray.length; int++) {
tag2=tagarray[int].replace("<","</");
var tagpair=new RegExp(tagarray[int]+tag2,"g");
source=source.replace(tagpair,"");
    }
alert(source);

}