最终为我工作的解决方案非常简单.我遍历所有元素,然后遍历所有属性,然后在元素上删除它们,这留下了一个清理版本,我只需要验证html标签本身.我认为这不是解决问题的最佳方法,但它可以满足我的需求.
**编辑**
我对旧代码进行了多次上调,但它实际上包含了一个绝对的初学者错误.在迭代同一个列表时,您永远不能删除.
但是,只有在删除了多个属性时才会触发此错误.
使用bugFix更新代码:
Document doc = Jsoup.parseBodyFragment(aText);
Elements el = doc.getAllElements();
List 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;
}