2016-11-03 3 views
4

У меня есть пример кода, как показано ниже.Избегайте удаления пробелов и новой строки при анализе html с помощью jsoup

String sample = "<html> 
<head> 
</head> 
<body> 
This is a sample on    parsing html body using jsoup 
This is a sample on    parsing html body using jsoup 
</body> 
</html>"; 

Document doc = Jsoup.parse(sample); 
String output = doc.body().text(); 

я получаю выход как

This is a sample on parsing html body using jsoup This is a sample on `parsing html body using jsoup` 

Но я хочу, чтобы выход как

This is a sample on    parsing html body using jsoup 
This is a sample on    parsing html body using jsoup 

Как разобрать его так, что я получаю этот выход? Или есть ли другой способ сделать это на Java?

ответ

3

Вы можете отключить красивую печать вашего документа, чтобы получить результат, как вы этого хотите. Но вы также должны изменить .text() на .html().

Document doc = Jsoup.parse(sample); 
doc.outputSettings(new Document.OutputSettings().prettyPrint(false)); 
String output = doc.body().html(); 
0

Спецификация HTML требует, чтобы несколько пробельных символов были свернуты в одно пробелы. Поэтому при анализе образца анализатор корректно устраняет лишние символы пробелов.

Я не думаю, что вы можете изменить работу парсера. Вы можете добавить шаг предварительной обработки, в котором вы заменяете несколько пробелов непроницаемыми пробелами ( ), которые не будут разрушаться. Конечно, побочным эффектом было бы то, что они были бы, ну, не прерывистыми (что не имеет значения, действительно ли вы хотите использовать выделенный текст, как в doc.body(). Text()).