Подтвердить что ты не робот

Линия связи 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).

Кто-нибудь столкнулся с этой проблемой, и еще лучше, нашел способ избежать этого лишнего, нежелательного персонажа, который будет добавлен к строке таким образом?

4b9b3361

Ответ 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));

(На самом деле это то же самое решение, что и в комментариях)