我有一个用户提交的字符串,其中包含HTML内容,例如
"<p></p><div></div><p>Hello<br/>world</p><p></p>"
我想转换此字符串,以便删除空标记对(但保留<br/>
之类的空标记)。例如,此转换的结果应将上面的字符串转换为
"<p>Hello<br/>world</p>"
我想使用JSoup来实现这一点,因为我已经在我的类路径中使用了这个,并且对我来说最容易在服务器端执行此转换。
答案 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();
});
答案 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);
}