2012-01-03 116 views
7

我有一个包含HTML内容,如删除空标签对

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

我想改变这个字符串,这样的空标签对被删除(但空标签,如<br/>用户提交的字符串保留)。例如,这种转变的结果应该将字符串转换上面

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

我想使用JSoup要做到这一点,因为我已经有这个在我的类路径,这将是最简单的我在服务器端执行此转换。

回答

21

这里是举例来说,做到这一点(使用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> 
+0

丁,丁,丁,我们有一个赢家! – 2012-01-10 14:31:57

+0

我测试了它和上面打印'

你好
世界代码

' – 2012-01-10 15:19:01

+2

我注意到,这个代码删除除净内部的空余IMG:

所以我空尺寸检查也:element.childNodes()&&尺寸( )== 0,我的更新是否正确? – 2014-11-12 07:51:45

8

没有真正熟悉jsoup,但你可以这样做一个简单的正则表达式替换:

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

虽然采用了全解析你很可能只是在加工过程中掉落空的内容,这取决于你在做什么最终会去做。

+0

的replaceAll(“<[A-ZA -Z0-9] *>“,”“);可能看起来比允许任何其他的更好> – 2012-01-09 04:12:00

+0

但是斜体粗体?这不好用,但仍然合法。我需要能够重新匹配第一组尖括号中使用的内容。 – FrankieTheKneeMan 2012-01-09 05:52:21

+0

@PragalathanM,我认为,但标签也允许使用连字符,下划线等。一旦你开始添加所有这些字符,该语句开始看起来很丑陋(你可能会错过一些)。 – 2012-01-09 10:22:26

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/

+0

'childrens'功能正在产生错误。 – 2012-01-03 11:17:23

+0

更新了答案..请检查,其工作正常我已经在我的机器上测试过。 – 2012-01-03 11:35:35

+0

这将删除所有空标签,包括
2012-01-10 12:44:24

-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); 

}