Jsoup выбирает и повторяет все элементы

Я подключусь к URL-адресу через jsoup и получу все его содержимое, но дело в том, что если я выберу лайк,

doc.select("body")

он возвращает один элемент, но я хочу получить все элементы на странице и повторять их один за другим, например,

<html>
<head><title>Test</title></head>
<body>
<p>Hello All</p>
<a href="test.html">Second Page</a>
<div>Test</div>
</body>
</html>

Если я выберу использование тела, я получаю результат в одной строке, например,

Test Hello All Second Page Test

Вместо этого я хочу выбрать все элементы и выполнить итерацию один за другим и получить такие результаты, как

Test
Hello All
Second Page
Test

Будет ли это возможно с помощью jsoup?

Спасибо,
Картик


person Karthik    schedule 12.08.2011    source источник


Ответы (3)


Вы можете выбрать все элементы документа с помощью селектора *, а затем получить текст каждого по отдельности с помощью Element#ownText().

Elements elements = document.body().select("*");

for (Element element : elements) {
    System.out.println(element.ownText());
}
person BalusC    schedule 12.08.2011
comment
Нет, это также производит тот же результат, есть идеи? - person Karthik; 16.08.2011
comment
Тогда это не прямые дети тела, как вы продемонстрировали в своем вопросе. Я обновлю ответ. - person BalusC; 16.08.2011
comment
вы должны использовать document.getAllElements() вместо этого селектора. см. jsoup.org/apidocs/org/jsoup/nodes/Element .html#getAllElements-- - person TeaTime; 25.04.2019
comment
Я получаю сообщение об ошибке Может выполнять только итерацию по массиву или экземпляру java.lang.iterable - person ReZ; 17.10.2020

Чтобы получить все элементы в теле документа, используйте библиотеку jsoup.

doc.body().children().select("*");

Чтобы получить только первый уровень элементов в элементах тела документа.

doc.body().children();

person Blind TeamKiller    schedule 20.10.2014
comment
Это важное различие, которое не сразу видно из других ответов. Спасибо. Чтобы получить элементы первого уровня тела документа и их дочерние элементы (второй пример), в отличие от плоского списка всех элементов внутри тега body (первый пример). - person Murrah; 18.02.2017

Вы можете использовать XPath или любую библиотеку, содержащую XPath.

выражение //text()

Протестируйте выражение с помощью XML здесь

person zawhtut    schedule 12.08.2011
comment
не могли бы вы рассказать, как xpath взаимодействует с jsoup? - person Thufir; 19.01.2019