2015-11-01 179 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