2015-08-07 4 views
0

Я пытаюсь скрести следующий HTML:Выбор сокровенную ребенка элемента Jsoup

<table> 
    <tr> 
     <td class="cellRight" style="cursor:pointer;"> 
      <table cellpadding="0" cellspacing="0" width="100%"> 
       <tr> 
        <td class="cellRight" style="border:0;color:#0066CC;" 
        title="View summary" width="70%">92%</td> 

        <td class="cellRight" style="border:0;" width="30%"> 
        </td> 
       </tr> 
      </table> 
     </td> 
    </tr> 

    <tr class="listroweven"> 
     <td class="cellLeft" nowrap><span class="categorytab" onclick= 
     "showAssignmentsByMPAndCourse('08/03/2015','58100:6');" title= 
     "Display Assignments for Art 5 with Ms. Martinho"><span style= 
     "text-decoration: underline">58100/6 - Art 5 with Ms. 
     Martinho</span></span></td> 

     <td class="cellLeft" nowrap> 
      Martinho, Suzette<br> 
      <b>Email:</b> <a href="mailto:[email protected]" style= 
      "text-decoration:none"><img alt="" border="0" src= 
      "/genesis/images/labelIcon.png" title= 
      "Send e-mail to teacher"></a> 
     </td> 

     <td class="cellRight" onclick= 
     "window.location.href = '/genesis/parents?tab1=studentdata&tab2=gradebook&tab3=coursesummary&studentid=100916&action=form&courseCode=58100&courseSection=6&mp=MP4';" 
     style="cursor:pointer;"> 
      <table cellpadding="0" cellspacing="0" width="100%"> 
       <tr> 
        <td class="cellCenter"><span style= 
        "font-style:italic;color:brown;font-size: 8pt;">No 
        Grades</span></td> 
       </tr> 
      </table> 
     </td> 
    </tr> 

    <tr class="listrowodd"> 
     <td class="cellLeft" nowrap><span class="categorytab" onclick= 
     "showAssignmentsByMPAndCourse('08/03/2015','58200:10');" title= 
     "Display Assignments for Family and Consumer Sciences 5 with Sheerin"> 
     <span style="text-decoration: underline">58200/10 - Family and 
     Consumer Sciences 5 with Sheerin</span></span></td> 

     <td class="cellLeft" nowrap> 
      Sheerin, Susan<br> 
      <b>Email:</b> <a href="mailto:[email protected]" style= 
      "text-decoration:none"><img alt="" border="0" src= 
      "/genesis/images/labelIcon.png" title= 
      "Send e-mail to teacher"></a> 
     </td> 

     <td class="cellRight" style="cursor:pointer;"> 
      <table cellpadding="0" cellspacing="0" width="100%"> 
       <tr> 
        <td class="cellCenter"><span style= 
        "font-style:italic;color:brown;font-size: 8pt;">No 
        Grades</span></td> 
       </tr> 
      </table> 
     </td> 
    </tr> 
</table> 

Я пытаюсь извлечь значения для классов студента, и если нет классов нет, то значение «нет классов ", который будет присутствовать в html, если это так. Однако, когда я делаю выберите запрос, такие как следующие:

doc.select("[class=cellRight]") 

я получаю выход, где все значения класса перечислены в два раза (потому что они вложены в двух элементов, содержащих [класс = cellRight] различающая, и нормальное количество листинга «без оценок». Поэтому мой вопрос: как я могу выбрать только самый внутренний ребенок в документе, который содержит отличитель [class = cellRight]? (Я уже рассматривал проблему с пустым значением) Вся помощь оценена !!

+0

Можете ли вы очистить html? – luksch

+0

- это лучше? @luksch – Markoe7

ответ

1

Есть много возможностей для этого

Можно было бы это:. Тест для каждого " cellRight ", все его родители, если они также несут этот класс. Указать, если вы найдете его:

List<Element> keepList = new ArrayList<>(); 
Elements els = doc.select(".cellRight"); 
for (Element el : els){ 
    boolean keep = true; 
    for (Element parentEl : el.parents()){ 
    if (parentEl.hasClass("cellRight")){ 
     //parent has class as well -> discard! 
     keep = false; 
     break; 
    } 
    } 
    if (keep){ 
    keepList.add(el); 
    } 
} 
//keepList now contains inner most elements with your class 

Обратите внимание, что это написано без компилятора и из моей головы. Могут быть ошибки орфографии/синтаксиса.

Другое примечание. ваше использование "[class=cellRight]" работает хорошо, только если есть этот класс. С множественными clsses в случайном порядке (что вполне можно ожидать) лучше использовать точечный синтаксис ".cellRight"

+0

спасибо, что это именно то, что я искал – Markoe7

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