2012-01-03 15 views
7

मैं एक उपयोगकर्ता द्वारा सबमिट स्ट्रिंग है जो HTML सामग्री जैसेनिकालें खाली एचटीएमएल टुकड़ा से टैग जोड़े

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

मैं <br/> की तरह इस स्ट्रिंग ऐसी है कि खाली टैग जोड़े निकाल दिए जाते हैं (लेकिन रिक्त टैग्स को बदलना चाहते हैं शामिल है बनाए रखा है)। उदाहरण के लिए, इस बदलाव के परिणाम से ऊपर

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

को मैं JSoup उपयोग करने के लिए ऐसा करने के लिए, जैसा कि मैंने पहले ही मेरी classpath पर इस राशि चाहते हैं स्ट्रिंग कन्वर्ट चाहिए, और यह करने के लिए मेरे लिए सबसे आसान होगा सर्वर-पक्ष पर यह परिवर्तन करें।

उत्तर

21

यहाँ उदाहरण के लिए, कि बस करना है कि (का उपयोग कर JSoup) है:

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

डिंग, डिंग, डिंग, हमारे पास विजेता है !!! –

+0

मैं इसे बाहर का परीक्षण किया और प्रिंट '

हैलो
दुनिया उपरोक्त कोड

' –

+2

मैं इस कोड एक div पूर्व अंदर खाली img हटा दें कि देखा:

तो मैं भी खाली आकार के लिए जाँच:। Element.childNodes() && आकार () == 0, क्या मेरा अपडेट सही है? –

8
नहीं

वास्तव में jsoup से परिचित हैं, लेकिन आप एक सरल regex के साथ ऐसा कर सकता है की जगह:

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

एक पूर्ण पार्सर के साथ आप शायद सिर्फ प्रसंस्करण के दौरान खाली सामग्री छोड़ सकता है, आप क्या कर रहे हैं पर निर्भर करता है अंततः इसके साथ करने जा रहा है।

+0

replaceAll ("<[a-zA:

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

ऊपर कोड के उत्पादन में आप के लिए क्या देख रहे है -Z0-9] *> "," "); –

+0

के अलावा कुछ भी अनुमति देने से बेहतर दिख सकता है लेकिन इटालिक बोल्ड के बारे में क्या? यह बुरा उपयोग है, लेकिन अभी भी वैध है। मुझे लगता है कि आपको कोण ब्रैकेट के पहले सेट में जो भी इस्तेमाल किया गया था, उसे रीमेच करने में सक्षम होना चाहिए। – FrankieTheKneeMan

+0

@ प्रगालाथन एम, मैंने इसे माना, लेकिन टैग हाइफ़न, अंडरस्कोर इत्यादि भी अनुमति देते हैं। एक बार जब आप उन सभी पात्रों को जोड़ना शुरू कर देते हैं, तो कथन बदसूरत लग रहा है (और आप कुछ याद कर सकते हैं)। –

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

'बच्चों का कार्य' एक त्रुटि उत्पन्न कर रहा है। –

+0

उत्तर अपडेट किया गया .. कृपया जांचें, यह ठीक काम कर रहा है मैंने अपनी मशीन में परीक्षण किया है। –

+0

यह

-2

नहीं पता Jsoup, नीचे दिए गए कोड को भी सरल जावास्क्रिप्ट regex के साथ काम करता है। नीचे दिए गए कोड को आजमाएं।

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 उपयोगकर्ता के इनपुट HTML से सही एक्सएमएल कर देगा। सभी खाली टैग खोजने और निकालने के लिए एक्सएमएल पार्सर का प्रयोग करें। मुझे लगता है कि यह regexp से बेहतर विचार है। यहां देखें: Java Remove empty XML tags आप अपने लिए खाली टैग खोजने के लिए JSoup का भी उपयोग कर सकते हैं। यहां देखें: http://jsoup.org/cookbook/extracting-data/selector-syntax और Node.remove() विधि का उपयोग करें।

संबंधित मुद्दे