2015-12-05 1 views
0

Я пытаюсь очистить текст от веб-сайта JSoup. Я могу получить текст в чистоте (без форматирования вообще, только текст), или со всем прикрепленным форматированием (т. Е. < br> вместе с < p> и </p>).Проблема с форматированием HTML при использовании JSoup для Java

Однако, похоже, я не могу отформатировать форматированную версию < br />, и это единственное, что было запрошено специально для текста.

Например, я могу получить это:

<p><br>Worldwide database</p> 

и это:

Worldwide database 

, но я не могу получить это, что мой желаемый результат:

Worldwide database<br/> 

Я не вижу никаких < br />, глядя на код HTML через плагин FireBug на Firefox, поэтому мне интересно, может ли это быть b e проблема? Или, может быть, есть проблема с методом, который я использую в своем коде, чтобы вытащить текст?

В любом случае, вот мой код:

Elements descriptionHTML = doc.select("div[jsname]"); // <-- Get access to the text w/ JSoup 
String descText = descriptionHTML.text(); // <-- Get the code w/o any formating at all 

// This prints out the desired text with the <p><br> and </p>, but no <br/> 
for (Element link : descriptionHTML) 
{ 
    String jsname = link.attr("jsname"); 
    if(jsname.equals("C4s9Ed")){      
     System.out.println(link); 
     break; 
    }           
} 

Я действительно apprecaite любой помощи в этом вопросе.

Спасибо, Джек

+0

Вы можете включать URL из который вы читаете в формате HTML? –

ответ

1

HTML не определяет закрывающий тег для <br> элементов. Однако XHTML требует, чтобы тег был помечен как пустой: <br />. JSoup анализирует оба, но распечатает только обычный HTML (<br>).

Если вы используете синтаксический анализатор XML в Jsoup, теги <br> не закрыты, и поэтому Jsoup пытается угадать, где разместить соответствующие закрывающие теги </br>, которые не соответствуют ни HTML, ни XHTML-совместимому.

Если вы хотите сохранить информацию о разрыве линии и вычеркнуть все другие теги, я думаю, вам нужно запрограммировать эту часть за пределами Jsoup. Например, вы можете заменить все <br> и <br /> строки с стоимость создания эксклюзивной другой строки, скажем "_brSplitPos_", а затем разобрать документ с JSoup, печатать только текст и заменить "_brSplitPos_" против <br />:

String html = "<div>This<br>is<br />a<br>test</div>"; 
html = html.replaceAll("<br(?:\\s+/)?>", "_brSplitPos_"); 
Document docH = Jsoup.parse(html); 
String onlyText = docH.text(); 
onlyText = onlyText.replace("_brSplitPos_", "<br />"); 
System.out.println(onlyText); 
Смежные вопросы