2014-10-02 86 views
1

我有這個html。我需要「李」。我使用.select(「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 2014-10-02 18:22:30

+0

您可以使用[selector syntax](http://jsoup.org/cookbook/extracting-data/selector-syntax)來導航DOM。最終,你不能忽視/不考慮'ul'在那裏@davidad – kolossus 2014-10-02 18:46:30

+0

okk謝謝你的回答! – davidad 2014-10-02 22:24:24

3

這是更簡單 - 使用CSS選擇器一樣

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

當你使用「>」你告訴所有你想要的是給DOM元素的第一級子。看看這段代碼 - https://gist.github.com/wololock/621a42546cac6dd0daa2你可以簡單地將它作爲一個groovy腳本運行。

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 

而從UL元件,檢索所有第一級li

ul.select(">li"); 

或在絕對方式(cf @Szymon回答):

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