Удаление атрибутов Jsoup в тегах html

У меня проблема, что я хочу фильтровать определенные тексты, которые могут содержать html. Я использую jsoup для белого списка и очищаю теги, которые работают довольно хорошо.

У меня проблема только в том, что некоторые теги могут содержать атрибуты, в основном стиль или классы, но также могут быть разные атрибуты. (имя, цель, ect.) При очистке это не проблема, потому что они раздели красиво, но при белом списке некоторые теги, которые будут разрешены, блокируются из-за атрибутов. Основной белый список, похоже, не охватывает атрибуты стиля или класса, плюс я не могу быть уверен, с чем еще я сталкиваюсь.

поскольку я хочу разрешить довольно широкий диапазон тегов, но удалить большинство из них во время очистки, я не хочу добавлять все атрибуты для всех тегов, которые я разрешаю. Проще всего было бы удалить все атрибуты из всех тегов, так как они меня все равно не интересуют, а затем проверить, действителен ли разделенный текст с обычными тегами.

есть функция, которая удаляет все атрибуты или какой-то простой цикл, другой вариант-сказать белому списку игнорировать все атрибуты и просто белый список на тегах.

1 ответов


решение, которое, наконец, работал для меня довольно просто. Я перебираю все элементы, затем перебираю все атрибуты, а затем удаляю их на элементе, что оставляет мне чистую версию, где мне просто нужно проверить сами html-теги. Я думаю, что это не самый аккуратный способ решить проблему, но он делает то, что я хотел.

* * EDIT**

Я получил upvoted много раз для старого кода, в то время как на самом деле он содержал абсолютную ошибку начинающих. Вы невозможно удалить при повторении одного и того же списка. Однако эта ошибка срабатывает только при удалении нескольких атрибутов.

обновленный код с исправлением ошибки:

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;
}