2013-08-14 5 views
6

पर Jsoup विशेषता हटाने को मुझे समस्या है कि मैं कुछ ग्रंथों को फ़िल्टर करना चाहता हूं जिनमें HTML हो। मैं टैग्स को श्वेतसूची और साफ करने के लिए jsoup का उपयोग करता हूं जो बहुत अच्छा काम करता है।एचटीएमएल टैग

मुझे केवल समस्या है कि कुछ टैग में विशेषताओं, ज्यादातर शैली या कक्षाएं हो सकती हैं लेकिन अलग-अलग विशेषताएं भी हो सकती हैं। (नाम, लक्ष्य, ect।) इसे साफ करते समय कोई समस्या नहीं है क्योंकि वे अच्छी तरह से छीन लेते हैं लेकिन जब कुछ टैग्स को श्वेतसूची में अनुमति दी जाती है, तो गुणों के कारण अवरुद्ध हो जाते हैं। मूल श्वेतसूची शैली या वर्ग विशेषताओं को कवर करने के लिए प्रतीत नहीं होता है और मैं जो भी सामना कर रहा हूं उसे मैं शर्मिंदा नहीं कर सकता।

चूंकि मैं टैग की विस्तृत श्रृंखला को अनुमति देना चाहता हूं, लेकिन सफाई के दौरान उनमें से अधिकांश को हटा दें, मैं उन सभी टैग्स के लिए सभी विशेषताओं को जोड़ना नहीं चाहता हूं जिन्हें मैं अनुमति दे रहा हूं। सबसे आसान सभी टैग्स से सभी विशेषताओं को पट्टी करना होगा, क्योंकि मुझे उनमें से कोई दिलचस्पी नहीं है और फिर जांचें कि सादा टैग के साथ छीन लिया गया पाठ मान्य है या नहीं।

क्या कोई ऐसा फ़ंक्शन है जो सभी विशेषताओं या कुछ साधारण लूप को हटा देता है, दूसरा विकल्प श्वेतसूची को सभी विशेषताओं को अनदेखा करने और टैग पर श्वेतसूची को बताने के लिए कहता है।

+0

संबंधित साथ upadted कोड: http://stackoverflow.com/questions/14303691/why-does-jsoup-remove-element-ids/14303971#14303971 –

उत्तर

13

अंततः मेरे लिए काम किया गया समाधान काफी सरल है। मैं सभी तत्वों के माध्यम से पुनरावृत्त करता हूं, फिर सभी विशेषताओं के माध्यम से पुनरावृत्त करता हूं और फिर उन्हें तत्व पर हटा देता हूं, जो मुझे एक साफ़ संस्करण के साथ छोड़ देता है जहां मुझे केवल HTML-टैग को सत्यापित करना होता है। मुझे लगता है कि समस्या को हल करने का यह सबसे अच्छा तरीका नहीं है, लेकिन यह वही करता है जो मैं चाहता था।

** संपादित करें **

मैं पुराने कोड के लिए कई बार upvoted गया, जबकि यह वास्तव में एक निरपेक्ष शुरुआती बग निहित। आप एक ही सूची के माध्यम से पुन: प्रयास करते समय कभी भी हटा नहीं सकते हैं। यह बग केवल तभी ट्रिगर हुआ जब एक से अधिक विशेषता हटा दी गई थी।

bugfix

Document doc = Jsoup.parseBodyFragment(aText); 
Elements el = doc.getAllElements(); 
List<String> attToRemove = new ArrayList<>(); 
for (Element e : el) { 
    Attributes at = e.attributes(); 
    for (Attribute a : at) { 
     attToRemove.add(a.getKey()); 
    } 

    for(String att : attToRemove) { 
     e.removeAttr(att); 
    } 
} 
if(Jsoup.isValid(doc.body().html(), theLegalWhitelist)) 
    return true; 
else 
    return false; 
संबंधित मुद्दे