2013-08-14 27 views
6

Html içerebilecek bazı metinleri filtrelemek istediğim için sorun yaşıyorum. Jsoup'u kullanarak, güzel olan etiketleri beyaz listeye ekleyin ve temizleyin.Jsoup özniteliği kaldırılıyor html etiketleri

Yalnızca bazı etiketlerin çoğunlukla stil veya sınıf nitelikleri içerebileceği, ancak farklı özellikler de olabileceği sorunu var. (name, target, ect.) Bunu temizlerken sorun yoktur, çünkü bunlar iyi bir şekilde sıyrılırlar, ancak beyaz etiketler eklendiğinde, izin verilen bazı etiketler, nitelikler nedeniyle engellenir. Temel beyaz liste, stil veya sınıf özelliklerini kapsayacak gibi görünmüyor, ben de karşılaştığım başka bir şey değil. Ben etiketleri oldukça geniş bir yelpazede sağlar, ancak temizlik sırasında çoğu kaldırmak istediğiniz beri

, ben izin veriyorum tüm etiketler için tüm özellikleri eklemek istemiyorum. En basit olanı, tüm etiketlerden tüm özniteliklerin çıkarılmasıdır. Zaten bunlarla ilgilenmiyorum ve sonra düz etiketli soyulmuş metnin geçerli olup olmadığını kontrol et.

tüm özellikleri ya da bazı basit döngü kaldıran bir işlev, bir başka seçenek tüm özelliklerini göz ardı ederek sadece etiketlere beyaz listeye almak whitelister anlatmak olacağını mı.

+0

Related ile

upadted kodu: http://stackoverflow.com/questions/14303691/why-does-jsoup-remove-element-ids/14303971#14303971 –

cevap

13

Sonunda benim için çalışan çözüm oldukça basit. Tüm elemanlar boyunca yineliyorum, sonra tüm öznitelikler boyunca yineleyin ve daha sonra bunları elemanın üzerine kaldırın, ki bu da beni sadece html etiketlerini doğrulamak zorunda olduğum temizlenmiş bir sürüm bırakıyor. Bence bu sorunu çözmek için en doğru yol değil ama istediğimi yapıyor.

** DÜZENLEME **

aslında mutlak başlayanlar hata içerdiği ise eski kodu için defalarca upvoted gördü. Aynı listede yinelenirken asla silemezsiniz. Bu hata, ancak, birden fazla özellik kaldırıldığında tetiklenir. 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;