2014-06-15 4 views
0

Мне нужно извлечь весь текст из фрагмента HTMl.Jsoup: Извлечь текст как человек прочитал бы его

Пример:

ВХОД: <p><div>how are</div> you doing?</p><p>I'm doing well</p>

ВЫВОД: how are you doing? I'm doing well

я нашел вопросы, такие, как этот Text Extraction from HTML Java, что имеют дело с подобными проблемами, но все они просто удалите теги <p>, но не удаляйте внутренние элементы.

Изначально я пробовал перечислять через детей каждого тега <p> и конкатенировать их содержимое, а также рекурсивно изучать каждого внука и конкатенировать его детей и так далее, пока не будет только текст. Проблема в том, что какой-то текст не окружен тегом и просто прост.

Я также пробовал Jsoup.parse(html).select("p").text(), но я получаю "[]I'm doing well" в качестве выхода.

Это похоже на очень распространенную потребность в программах типа веб-гусениц, но я не могу найти решение.

+0

Это что-то злоупотребления HTML. Детский элемент подразумевает связанный, но отдельный контент. Поэтому почему вы пытаетесь найти подобное решение. То, что вам нужно реализовать, - это рекурсивное решение, обеспечивающее анализ всех дочерних элементов текущего элемента перед переходом в следующий. – christopher

+0

@christopher Ohhhh ... Случайно я набрал 'div' вместо' span', когда писал свой модульный тест (который я впоследствии скопировал на этот вопрос). Если я заменил его тегами 'span', он будет работать сейчас. Извините, что тратить время. –

ответ

2

Попробуйте это:

Document doc = Jsoup.parse("<p><div>how are</div> you doing?</p><p>I'm doing well</p>"); 
String body = doc.body().text(); 
+0

'doc.body(). Text()' Только удаляет теги span при компиляции текста, но не используется, если используется тег div. –

+0

Это действительно приятное решение. +1 от меня! – christopher

Смежные вопросы