Линия связи jsoup
Мы используем Jsoup.clean(String, Whitelist) для обработки некоторого ввода, и кажется, что Jsoup добавляет посторонний разрыв строки непосредственно перед допустимыми тегами. Я видел, как некоторые люди публикуют эту проблему в Интернете, но не смогли найти решение.
Например, допустим, у нас есть очень простая строка с выделенными в ней жирными тегами, например:
String htmlToClean = "This is a line with <b>bold text</b> within it."
String returnString = Jsoup.clean(htmlToClean, Whitelist.relaxed());
System.out.println(returnString);
Что происходит из вызова метода clean(), это примерно так:
This is a line with \n<b>bold text</b> within it.
Обратите внимание, что посторонний "\n" добавлен непосредственно перед открытием жирным тегом. Я не могу отследить источник, в который он добавлен (хотя, по общему признанию, я новичок в Jsoup).
Кто-нибудь столкнулся с этой проблемой, и еще лучше, нашел способ избежать этого лишнего, нежелательного персонажа, который будет добавлен к строке таким образом?
Ответы
Ответ 1
Хмм... не видел никаких вариантов для этого.
Если вы разобрали html в Document
, у вас есть некоторые настройки вывода:
Document doc = Jsoup.parseBodyFragment(htmlToClean);
doc.outputSettings().prettyPrint(false);
System.out.println(doc.body().html());
С prettyPrint
вы получите следующий результат: This is a line with <b>bold text</b> within it.
Возможно, вы можете написать свой собственный метод clean()
, так как реализованный использует Document
(там вы можете отключить prettyPrint
):
Обычные методы:
public static String clean(String bodyHtml, Whitelist whitelist) {
return clean(bodyHtml, "", whitelist);
}
public static String clean(String bodyHtml, String baseUri, Whitelist whitelist) {
Document dirty = parseBodyFragment(bodyHtml, baseUri);
Cleaner cleaner = new Cleaner(whitelist);
Document clean = cleaner.clean(dirty);
return clean.body().html();
}
Ответ 2
Добавление:
Я только что загрузил Jsoup 1.7.1, в этой версии можно использовать clean()
-метод с пользовательским OutputSettings
:
String html = "This is a line with <b>bold text</b> within it.";
OutputSettings settings = new OutputSettings();
settings.prettyPrint(false);
String clean = Jsoup.clean(html, "", Whitelist.relaxed(), settings);
Или короче:
String clean = Jsoup.clean(html, "", Whitelist.relaxed(), new OutputSettings().prettyPrint(false));
(На самом деле это то же самое решение, что и в комментариях)