Избегайте удаления пробелов и новой строки при разборе 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?
2 ответа
Вы можете отключить красивую печать вашего документа, чтобы получить вывод, как вы хотите. Но вы также должны изменить .text()
в .html()
,
Document doc = Jsoup.parse(sample);
doc.outputSettings(new Document.OutputSettings().prettyPrint(false));
String output = doc.body().html();
Спецификация HTML требует, чтобы несколько символов пробела были объединены в один пробел. Следовательно, при разборе образца парсер правильно удаляет лишние пробельные символы.
Я не думаю, что вы можете изменить, как работает парсер. Вы можете добавить шаг предварительной обработки, при котором вы заменяете несколько пробелов неразрывными пробелами (), которые не будут разрушаться. Однако побочным эффектом, конечно, будет то, что они будут неразрывными (что не имеет значения, если вы действительно хотите использовать визуализированный текст, как в doc.body(). Text()).