删除空标签对
我有一个包含HTML内容,如删除空标签对
"<p></p><div></div><p>Hello<br/>world</p><p></p>"
我想改变这个字符串,这样的空标签对被删除(但空标签,如<br/>
用户提交的字符串保留)。例如,这种转变的结果应该将字符串转换上面
"<p>Hello<br/>world</p>"
我想使用JSoup要做到这一点,因为我已经有这个在我的类路径,这将是最简单的我在服务器端执行此转换。
这里是举例来说,做到这一点(使用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>
没有真正熟悉jsoup,但你可以这样做一个简单的正则表达式替换:
String html = "<p></p><div></div><p>Hello<br/>world</p><p></p>";
html = html.replaceAll("<([^>]*)></\\1>", "");
虽然采用了全解析你很可能只是在加工过程中掉落空的内容,这取决于你在做什么最终会去做。
的replaceAll(“ [a-zA-Z0-9] *>“,”“);可能看起来比允许任何其他的更好> – 2012-01-09 04:12:00
但是斜体粗体?这不好用,但仍然合法。我需要能够重新匹配第一组尖括号中使用的内容。 – FrankieTheKneeMan 2012-01-09 05:52:21
@PragalathanM,我认为,但标签也允许使用连字符,下划线等。一旦你开始添加所有这些字符,该语句开始看起来很丑陋(你可能会错过一些)。 – 2012-01-09 10:22:26
如果你正在使用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();
});
'childrens'功能正在产生错误。 – 2012-01-03 11:17:23
更新了答案..请检查,其工作正常我已经在我的机器上测试过。 – 2012-01-03 11:35:35
这将删除所有空标签,包括
–
2012-01-10 12:44:24
不知道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);
}
Jsoup将来自用户输入HTML正确的XML。使用XML解析器来查找和删除所有空标签。我认为这比regexp更好。看这里:Java Remove empty XML tags 你也可以使用JSoup为你找到空标签。看看这里:http://jsoup.org/cookbook/extracting-data/selector-syntax 并使用Node.remove()方法。
丁,丁,丁,我们有一个赢家! – 2012-01-10 14:31:57
我测试了它和上面打印'
你好
' – 2012-01-10 15:19:01世界代码
我注意到,这个代码删除除净内部的空余IMG: