Jsoup - удалить все теги форматирования и ссылки, сохранить только текст
Скажем, у меня есть html-фрагмент:
<p> <span> foo </span> <em> bar <a> foobar </a> baz </em> </p>
Что я хочу извлечь из этого:
foo bar foobar baz
Итак, мой вопрос: как я могу удалить все теги обертки из html и получить только текст в том же порядке, что и в html?
Как вы можете видеть в заголовке, я хочу использовать jsoup для синтаксического анализа.
Пример для акцентированного html (обратите внимание на символ "á" ):
<p><strong>Tarthatatlan biztonsági viszonyok</strong></p>
<p><strong>Tarthatatlan biztonsági viszonyok</strong></p>
Что я хочу:
Tarthatatlan biztonsági viszonyok
Tarthatatlan biztonsági viszonyok
Этот html не является статичным, как правило, я просто хочу, чтобы каждый текст обобщенного html-фрагмента в расшифрованном человекочитаемом виде, ширины разрывов строк.
Ответы
Ответ 1
С Jsoup:
final String html = "<p> <span> foo </span> <em> bar <a> foobar </a> baz </em> </p>";
Document doc = Jsoup.parse(html);
System.out.println(doc.text());
Вывод:
foo bar foobar baz
Если вы хотите только текст p-тега, используйте вместо doc.text()
:
doc.select("p").text();
... или только тело:
doc.body().text();
LineBreak:
final String html = "<p><strong>Tarthatatlan biztonsági viszonyok</strong></p>"
+ "<p><strong>Tarthatatlan biztonsági viszonyok</strong></p>";
Document doc = Jsoup.parse(html);
for( Element element : doc.select("p") )
{
System.out.println(element.text());
// eg. you can use a StringBuilder and append lines here ...
}
Вывод:
Tarthatatlan biztonsági viszonyok
Tarthatatlan biztonsági viszonyok
Ответ 2
Использование Regex: -
String str = "<p> <span> foo </span> <em> bar <a> foobar </a> baz </em> </p>";
str = str.replaceAll("<[^>]*>", "");
System.out.println(str);
OUTPUT: -
foo bar foobar baz
Использование Jsoup: -
Document doc = Jsoup.parse(str);
String text = doc.text();
Ответ 3
Собственно, правильный способ очистки с помощью Jsoup - это Whitelist
...
final String html = "<p> <span> foo </span> <em> bar <a> foobar </a> baz </em> </p>";
Document doc = Jsoup.parse(html);
Whitelist wl = new Whitelist().none()
String cleanText = new Jsoup().clean(doc ,wl)
Если вы хотите сохранить некоторые теги:
Whitelist wl = new Whitelist().relaxed().removeTags("a")