Обработка новых строк / разрывов строк с помощью Jsoup

При анализе файла Jspx через Jsoup я заметил, что при обнаружении новой строки и наличии закрывающего тега html jsoup будет обрабатывать содержимое как вне тега. Кроме того, я не хочу, чтобы содержимое присутствовало в выводе, который находится между ними.

Например:-

Мой файл JSPX: -

<div xmlns:spring="http://www.springframework.org/tags"
xmlns:fn="http://java.sun.com/jsp/jstl/functions"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:util="urn:jsptagdir:/WEB-INF/tags/util" 
xmlns:jsp="http://java.sun.com/JSP/Page">

<div> I only require this text </div>

<script type="text/javascript">
        var myVar= '${myVar}',
        var myVar1= '${myVar1}',
        var myVar2= '${myVar2}',
        var myVar3= '${myVar3}',
        var myVar4= '${myVar4}';
</script>

В коде Java: -

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

Теперь, когда я запускаю этот код: -

Фактическая O/P:-

xmlns:fn="http://java.sun.com/jsp/jstl/functions"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:util="urn:jsptagdir:/WEB-INF/tags/util" 
xmlns:jsp="http://java.sun.com/JSP/Page">

I only require this text

var myVar= '${myVar}',
var myVar1= '${myVar1}',
var myVar2= '${myVar2}',
var myVar3= '${myVar3}',
var myVar4= '${myVar4}';

И ожидается это: -

I only require this text

То же самое происходит, когда комментарии добавляются, и после нескольких строк я закрываю комментарии, а затем это показывает ("->") в выводе.

Я могу делать что-то не так или не знать о полном объеме Jsoup. Кто-нибудь может мне с этим помочь?

Благодарю.

1 ответ

С данным вводом и вашими командами JSoup на самом деле делает правильные вещи.

Давайте разберемся с этим:

Document doc = Jsoup.parse(s);

Когда ему предоставляется произвольная строка для анализа, JSoup обернет ее <html> а также <body> теги, чтобы сделать результат Document несколько действителен

String text = doc.body().text();

Теперь вы просите весь текст документа body и все его дети. Так что JSoup с радостью дает вам именно это - удаляя теги, которые он распознает, и оставляя вам больше, чем вы хотели.

Настоящая сила JSoup приходит с select() метод на Elements так что давайте использовать его, чтобы сузить до div представляет интерес:

String text = doc.body().select("div div").text();

Если вы не знакомы с CSS и / или JQuery, просто выберите ТОЛЬКО элементы, которые div внутри другого div - который должен выбрать ваш целевой текст красиво.

Обратите внимание, что если вы хотите быть в полной безопасности, в идеале вы должны определить интерес (т.е. <div id="mydiv">I only require this text</div>), а затем также использовать ownText в предпочтении text:

String text = doc.body().select("div#mydiv").ownText();

ownText() получает только непосредственный текст этого элемента, поэтому, если кто-то добавляет дочерний элемент к #mydiv это ничего не сломает /

Другие вопросы по тегам