2013-07-29 2 views
0

Используя структуру JSoup, я пытаюсь выполнить итерацию по нижнему div и извлечь текст в каждом из тегов <p> в массив. Поскольку список <div> и <p> равен бесконечно длинному, цикл do/while или цикл for будет предпочтительным методом получения информации в <p>.JSoup - Приращение с помощью тегов/массивов

Я не знаю, как перебирать <div> тегов ниже, потому что я не знаю, как следить за то, что <p> тегов из которых <div> «ы Я хранение в массив. Извинения, если ответ очевиден, поскольку я несколько новичок в Java и программировании в целом.

Большое вам спасибо за помощь. Дайте мне знать, если я могу добавить, что это поможет.

Пример HTML (предположит, что повторяет сотни раз):

 <div class="happy-div"> // want everything within this div to be in one array element 
       <p>good text here.</p> 
       <p>More good Text here.</p> 
       <p>Some good stuff here.</p> 
     </div> 
     <div class="sad-div"> // want everything within this div to be in a separate array element 
       <p>Some unhappy text here.</p> 
       <p>More unhappy Text here.</p> 
       <p>Some unhappy stuff here.</p> 
     </div> 
     <div class="depressed-div"> // everything within this div to be in a separate array element 
       <p>Some melancholy text here.</p> 
       <p>More melancholy Text here.</p> 
       <p>Some melancholy stuff here.</p> 
     </div> 
     .... repeats hundreds of times 

псевдокод:

String[] arrayOfP; 
for (int i = 0; i < numberOfDivs; i++) 
{ 
    arrayOfP[i] = doc.select("All of the text in the <p> tags within the div we've incremented to") 
    System.out.println(arrayOfP[i]) 
} 

Ожидаемого результат:

При печати содержимого строки значения элемента массива, I w ульд ожидать, чтобы увидеть это:

arrayofP[1] Some good text here. More good Text Here. Some good stuff here. 
arrayofP[2] Some unhappy text here. More unhappy Text Here. Some unhappy stuff here. 
arrayofP[3] Some melancholy text here. More melancholy Text Here. Some melancholy stuff here. 
.... 
+0

Post значения массива образцов. – newuser

+0

Я уточнил область ожидаемых результатов. Это помогает? –

ответ

1

Вы можете использовать HashMap для хранения списка P элементов для каждого div. Каждый ключ вашей карты может быть идентификатором, который вы можете предоставить своему div, а значение - это список P элементов.

Ex:

<div id="id_1" class="happy-div"> 
    <p>good text here.</p> 
    <p>More good Text here.</p> 
    <p>Some good stuff here.</p> 
</div> 

Map<String, List<String>> data = new HashMap<String, List<String>>(); 
Elements divs = doc.select("div"); 
for (Element div : divs) { 
    List<String> pList = new ArrayList<String>(); 
    Elements pElements = div.select("p"); 
    for (Element pElement : pElements) { 
     pList.add(pElement.text()); 
    } 
    data.put(div.attr("id"), pLists); 
} 
for (List<String> pList : data.values()) { 
    System.out.println(pList); 
} 
+0

Спасибо. Я попробую это решение позже сегодня и дам вам знать, что получится. –

+0

Должен ли я изменить HTML с помощью идентификатора div? К сожалению, я очищаю этот контент с другого веб-сайта, поэтому я не могу изменить HTML-код на веб-сайте? –

+0

Вы можете рассматривать классы _ (happy-div, sad-div, depressed-div) _ как уникальные для каждого из ваших div? если это так, вы можете использовать их вместо ids, даже если это не идеальное решение. – mabbas

Смежные вопросы