Подтвердить что ты не робот

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-фрагмента в расшифрованном человекочитаемом виде, ширины разрывов строк.

4b9b3361

Ответ 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")