2012-01-03 52 views
7

Tôi có một chuỗi người dùng gửi có chứa nội dung HTML nhưremove trống cặp thẻ từ HTML mảnh

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

Tôi muốn chuyển đổi chuỗi này mà cặp thẻ trống được loại bỏ (nhưng các thẻ trống như <br/> được giữ lại). Ví dụ, kết quả của sự biến đổi này nên chuyển đổi chuỗi trên để

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

Tôi muốn sử dụng JSoup để làm điều này, như tôi đã có điều này trên classpath của tôi, và nó sẽ là dễ nhất cho tôi để thực hiện phép chuyển đổi này ở phía máy chủ.

Trả lời

21

Dưới đây là ví dụ, rằng làm việc đó (sử dụng 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()) 

Kết quả của đoạn mã trên là những gì bạn đang tìm kiếm:

<p>Hello<br />world</p> 
+0

ding, ding, ding, chúng tôi có một người chiến thắng !!! –

+0

Tôi đã thử nghiệm nó ra và mã trên in '

Xin chào
thế giới

' –

+2

Tôi nhận thấy rằng mã này xóa img rỗng bên trong div cũ:

vì vậy tôi đã kiểm tra kích thước trống: && element.childNodes().) == 0, bản cập nhật của tôi có đúng không? –

8

Không thực sự quen thuộc với jsoup, nhưng bạn có thể làm điều này với một regex đơn giản thay thế:

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

Mặc dù với một phân tích cú pháp đầy đủ, bạn có thể có lẽ chỉ cần thả nội dung rỗng trong chế biến, tùy thuộc vào những gì bạn đang cuối cùng sẽ làm gì với nó.

+0

replaceAll ("<[a-zA -Z0-9] *> "," "); có thể trông đẹp hơn việc cho phép bất kỳ điều gì khác ngoài> –

+0

Nhưng còn khoảng Nghiêng Bold? Đó là sử dụng xấu, nhưng vẫn hợp pháp. Tôi điều bạn cần để có thể rematch chính xác những gì đã được sử dụng trong tập đầu tiên của dấu ngoặc nhọn. – FrankieTheKneeMan

+0

@ PragalathanM, tôi cho rằng, nhưng thẻ cũng cho phép dấu gạch ngang, dấu gạch dưới, v.v. Khi bạn bắt đầu thêm tất cả các ký tự đó, câu lệnh bắt đầu trông xấu xí (và bạn có thể bỏ lỡ một số). –

0

nếu bạn đang sử dụng jquery, bạn có thể làm điều đó như

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

fiddle: http://jsfiddle.net/LqCx5/2/

+0

Chức năng 'childrens' tạo ra lỗi. –

+0

cập nhật câu trả lời .. xin kiểm tra, nó làm việc tốt tôi đã thử nghiệm trong máy tính của tôi. –

+0

Thao tác này sẽ xóa tất cả các thẻ trống, bao gồm

-2

không biết Jsoup, bên dưới mã cũng làm việc với regex javascript đơn giản. thử mã dưới đây.

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

}

1

Jsoup sẽ làm cho XML đúng từ HTML sử dụng đầu vào. Sử dụng trình phân tích cú pháp XML để tìm và xóa tất cả các thẻ trống. Tôi nghĩ đó là một ý tưởng tốt hơn là regexp. Hãy xem tại đây: Java Remove empty XML tags Bạn cũng có thể sử dụng JSoup để tìm các thẻ trống cho bạn. Xem ở đây: http://jsoup.org/cookbook/extracting-data/selector-syntax và sử dụng phương thức Node.remove().

Các vấn đề liên quan