2012-01-03 143 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); 

}