2014-10-02 5 views
1

У меня есть этот html. Мне нужно «li». Я использую .select («li»), но внутри каждого «li» может быть другое «li», но меня это не интересует. Я хочу только «li» на первом уровне. Возможно?элемент экстракции в jsoup на первом уровне, не рекурсивный

<div id="id"> 
    <ul> 
     <li> 
      <div> 
       <ul> 
        <li> ........ </li> 
       </ul> 
      </div>  
     </li> 
     <li> ........ </li> 
     <li> ........ </li> 
     <li> ........ </li> 
     <li> ........ </li> 
     <li> ........ </li> 
     . 
     . 
     . 
    </ul> 
</div> 

ответ

1

Конечно, это:

Elements documentElements = document.getElementsByTag("id"); //get the div 
Element theList= documentElements.get(0); //get the unordered list 
Element listItem = theList.child(0); //this is the first list item in that unordered list 

Этот ответ предполагает, что вы уже загрузили HTML и имеют JSoup Document готовы для перемещения

Ссылка:

+0

спасибо, но что, если бы у меня была, например, «ul», которая игнорировала бы. То есть, я хочу взять только «li» – davidad

+0

Вы можете использовать [синтаксис селектора] (http://jsoup.org/cookbook/extracting-data/selector-syntax) для навигации по DOM. В конечном счете, вы не можете игнорировать/не учитывать тот факт, что 'ul' находится там @davidad – kolossus

+0

okk за ваш ответ! – davidad

3

Это даже проще - селектор использование CSS, как

Document.select('div#id > ul > li') 

При использовании «>» Вы говорите, что все, что вы хотите, это первый уровень ребенок данного DOM элемента. Взгляните на этот код - https://gist.github.com/wololock/621a42546cac6dd0daa2 Вы можете просто запустить его как отличный скрипт.

1

Вы должны использовать селектор CSS >, чтобы указать, что вы хотите только прямых детей.

Это может быть сделано сравнительно к элементу, как показано в следующем примере:

Element div = Jsoup.parseBodyFragment("<div id="id">...</div>").body(); 
div.select(">div>ul>li"); // this will return all li under the first ul 

А от уль элемента, извлекая все первый уровень li:

ul.select(">li"); 

или в абсолютный способ (cf @Szymon ответ):

Document.select('div#id > ul > li') 
Смежные вопросы