2015-11-01 180 views
0

用JSOUP(非正則表達式)刪除只有html標籤(保留所有定製/未知標籤)的正確方法是什麼?Jsoup只刪除html標籤

預期輸入:

<html> 
    <customTag> 
    <div> dsgfdgdgf </div> 
    </customTag> 
    <123456789/> 
    <123> 
    <html123/> 
</html> 

預期輸出:

<customTag> 
    dsgfdgdgf 
    </customTag> 
    <123456789/> 
    <123> 
    <html123/> 

我試圖用WhiteList.none()清潔使用,但它還會刪除自定義標記。

我也試過:

String str = Jsoup.parse(html).text() 

但它還會刪除自定義標記。

這個answer對我不好,因爲自定義標籤的數量是無限的。

+0

沒有完整的配方,但你可能要檢查消毒 – Marged

回答

0

你可能想嘗試這樣的:

String[] tags = new String[]{"html", "div"}; 
Document thing = Jsoup.parse("<html><customTag><div>dsgfdgdgf</div></customTag><123456789/><123><html123/></html>"); 
for (String tag : tags) { 
    for (Element elem : thing.getElementsByTag(tag)) { 
     elem.parent().insertChildren(elem.siblingIndex(),elem.childNodes()); 
     elem.remove(); 
    } 
} 
System.out.println(thing.getElementsByTag("body").html()); 

請注意:< 123456789 />和< 123>不符合XML標準,使他們獲得逃過一劫。另一個缺點可能是你必須明確地寫下你不喜歡的所有標籤(也就是所有的html標籤),並且它可能很慢。沒有看過這種運行速度有多快。

MFG 霧

+0

我想過像解決方案中的HTML,但我想要的東西一般。 – Rougher

+0

'generic'是什麼意思? – MiSt

+0

另一個想法是:清潔人員不實施黑名單過濾,因爲他們容易受到攻擊,因爲有人碰巧忘記了某些東西,或者標準獲得了新的可攻擊標籤。因此你很可能需要自己實現一個。 JSoup不提供... – MiSt