Страницы

Поиск по вопросам

вторник, 26 февраля 2019 г.

С помощью Jsoup спарсить данные из определенной родительской ветки


При парсинге страницы в Андроид приложение (пользую последнюю версию либ от Jsoup.org), выбираю только дочерние элементы(Выбираются все элементы, которые на схеме выделены розовым), а можно как нибудь выбрать сначала дочерние элементы с первого родителя, а потом только со второго и т.д.Как это примерно реализовать?


Ответ

Очевидное решение с выбором родительских элементов и последующим поиском детей в них.
public static void main(String[] args) { String html = "" + "" + " Try jsoup" + "" + "" + "

" + "

child1.1

" + "

child1.2

" + "

child1.3

" + "
" + "
" + "

child2.1

" + "

child2.2

" + "

child2.3

" + "
" + "
" + "

child3.1

" + "

child3.2

" + "

child3.3

" + "
" + "
" + "
" + "" + "";
Document doc = Jsoup.parse( html );
Elements parents = doc.select( "div" ); // выбор родителей System.out.printf( // можно выбрать элемент по индексу "parent[%d]: %s#%s%n", 2, parents.get( 2 ).tagName(), parents.get( 2 ).id() );
for ( Element parent : parents ) { System.out.printf( "parent: %s#%s%n", parent.tagName(), parent.id() ); for ( Element child : parent.select( "p" ) ) { // выбор внутри родителя System.out.println( child.text() ); } } }
Выведет:
parent[2]: div#parent3 parent: div#parent1 child1.1 child1.2 child1.3 parent: div#parent2 child2.1 child2.2 child2.3 parent: div#parent3 child3.1 child3.2 child3.3 parent: div#parent4
Используя псевдоселектор :has(selector), можно выбрать только те
, в которых есть


Elements parents = doc.select( "div:has(p)" );
Тогда в выдачу не попадет #parent4

Комментариев нет:

Отправить комментарий