2011-08-31 59 views
1

我哈瓦一個TEST.HTM頁:Jsoup:EQ(n)的選擇

<html> 
<body> 
    <div class="partA"> 
    1 
    </div> 
    <div class="partB"> 
    2 
    </div> 
    <div class="partC"> 
    3 
    </div> 
    <div class="partB"> 
    4 
    </div> 
    <div class="partD"> 
    5 
    </div> 
</body> 
</html> 

我想帶class = 「B部分」 獲得第一個div。

Document doc=Jsoup.parse(new File("test.htm"), "utf-8"); 
Elements select=doc.select("div.partB:eq(0)"); 
System.out.println(select.get(0).html()); 

運行的例外是:

Exception happens: 
    Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 
    at java.util.ArrayList.RangeCheck(ArrayList.java:546) 
    at java.util.ArrayList.get(ArrayList.java:321) 
    at org.jsoup.select.Elements.get(Elements.java:501) 
    at Test.main(Test.java:13) 

相反,我得到了一個大小= 0的元素。 任何幫助。謝謝〜

+0

如果我將div.partB:eq(0)更改爲div:eq(0),則效果良好。但是我想選擇類partB的第一個div。 – wangjbao

回答

1

eq(n)選擇器檢查元素的兄弟指數,即來自元素父級的計數。因此,在您的示例中,您的選擇器正在尋找一個div,其中包含類「partB」,並且它是其父(body)的第一個子元素。沒有這樣的元素存在,這就是爲什麼你得到零長度的回報。

我建議你使用:

Element div = doc.select("div.partB").first(); 

其中發現由類的div,然後使用元素的列表訪問winnows。

+0

感謝您的幫助。原因我需要在文件中配置查詢表達式,並在運行時選擇元素。那麼,還有其他方法嗎? – wangjbao

+1

沒有選擇器來計算匹配。這就是Elements的.get(n)方法的用途。你可以更新你的配置文件,以選擇包含一個索引/限制使用的結果數量? –

+0

謝謝。我會找到另一種方式。 – wangjbao