Обработка новых строк / разрывов строк с помощью 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
это ничего не сломает /