2017-07-13 158 views
1
<p><strong>Chapter One</strong></p><p>A piece of computer code</p>  
<table> 
<tr> 
<th>Firstname</th> 
<th>Lastname</th> 
<th>Age</th> 
</tr> 
<tr> 
<td>Jill</td> 
<td>Smith</td> 
<td>50</td> 
</tr> 
</table> 
<p><strong>Chapter Two</strong></p><p>Java in 10 minutes</p> 

如何獲得這兩個「強」之間的內容,所以我可以得到第一章將有「一塊計算機代碼」和表? 「strong」的nextSibling()只能檢索一個元素,如何獲取所有元素,直到遇到另一個「強」爲止? 謝謝如何獲取兩個標籤之間的內容在jsoup/javascript

回答

1

這種格式是否一致?如果是這樣,您可以簡單地查詢nextSibling兩次以查找強元素的父級(p)。

如果它會發生變化,您可能需要手動檢查何時停止迭代通過兄弟,例如驗證兄弟是否包含強元素。

這一切都取決於完整的上下文。

下面是基本循環的例子。考慮到不同的情況,您可能希望添加更多檢查或更好的查詢。

Document doc = Jsoup.connect(url).get(); 
List<Elements> data = new ArrayList<>(); 
Elements chapters = doc.select("p > strong"); 
for (Element chapter : chapters) { 
    if (!chapter.ownText().toLowerCase().contains("chapter")) 
     continue; //we've reached a strong element that isn't actually a chapter 
    List<Element> siblings = new ArrayList<>(); 
    Element next = chapter.nextElementSibling(); 
    while (next != null) { 
     if (next.ownText().toLowerCase().contains("chapter")) 
      break; //we've reached the end of this chapter 
     siblings.add(next); 
     next = next.nextElementSibling(); 
    } 
    data.add(new Elements(siblings)); 
} 
+0

它是不一致的〜 – Grace

+0

我們知道什麼進一步的信息呢?如果我們知道每一章都在一個強大的元素中,在另一個p元素中,那麼我們可以迭代自己並且每次都檢查一個強壯元素的兄弟。 –

+0

它更像是迭代nextUntil我們發現下一個強大的,但無法找到類似的方法在Jsoup – Grace

相關問題