2013-04-17 182 views
6

在jsoup Element.children()中返回元素的所有子元素(子元素)。但是,我想要元素的一級孩子(直接孩子)。如何在jsoup中獲得元素的一級子元素

我可以使用哪種方法?

+1

'Element.children()'返回直接的孩子,不是嗎?如果您有疑問,請嘗試'Element.children()。size()'。 – Vitaly

+0

我試過了。它返回所有兒童(兒童和兒童)。 – user1777220

+0

你好嗎? – acdcjunior

回答

9

Element.children()僅返回直接子對象。既然你把他們綁在一棵樹上,他們也有孩子。

如果您需要在不底層樹狀結構的直接子元素,那麼你需要創建它們如下

public static void main(String... args) { 

    Document document = Jsoup 
      .parse("<div><ul><li>11</li><li>22</li></ul><p>ppp<span>sp</span</p></div>"); 

    Element div = document.select("div").first(); 
    Elements divChildren = div.children(); 

    Elements detachedDivChildren = new Elements(); 
    for (Element elem : divChildren) { 
     Element detachedChild = new Element(Tag.valueOf(elem.tagName()), 
       elem.baseUri(), elem.attributes().clone()); 
     detachedDivChildren.add(detachedChild); 
    } 

    System.out.println(divChildren.size()); 
    for (Element elem : divChildren) { 
     System.out.println(elem.tagName()); 
    } 

    System.out.println("\ndivChildren content: \n" + divChildren); 

    System.out.println("\ndetachedDivChildren content: \n" 
      + detachedDivChildren); 
} 

輸出

2 
ul 
p 

divChildren content: 
<ul> 
<li>11</li> 
<li>22</li> 
</ul> 
<p>ppp<span>sp</span></p> 

detachedDivChildren content: 
<ul></ul> 
<p></p> 
+0

在循環內部,它也可以像這樣做得更乾淨。 (Element elem:divChildren){ elem = elem.clone(); elem.empty(); detachedDivChildren.add(detachedChild); } – umar

1

你可以隨時使用ELEMENT.child(索引)和索引,你可以選擇你想要的孩子。

+0

謝謝。當你知道你在尋找哪個孩子時很有用。在我正在執行的算法中,我不知道。 – user1777220

+0

你不能只給他們和preifned索引例如在類中,並使用該索引來獲取它們? –

+0

生活應該比它容易。返回元素的第一級子元素幾乎是所有解析器支持的非常基本的方法。索引編制的問題是,我不知道ELEMENT有多少直接孩子。另外,似乎索引是從葉子到父母完成的,並且很難使用它們。 – user1777220

1

在這裏你可以得到第一級子的價值

Element addDetails = doc.select("div.container > div.main-content > div.clearfix > div.col_7.post-info > ul.no-bullet").first(); 
    Elements divChildren = addDetails.children(); 
    for (Element elem : divChildren) { 
     System.out.println(elem.text()); 
       } 
0

這應該給你想要的p的直接後代列表的arent節點:

Elements firstLevelChildElements = doc.select(parent-tag > *); 

,或者您也可以嘗試檢索父元素,通過child(int index)獲得第一個子節點,然後嘗試通過siblingElements()檢索這個孩子的兄弟姐妹。

這會給你一個不包括使用過的孩子的一級孩子的列表,但是你必須從外部添加孩子。

Elements firstLevelChildElements = doc.child(0).siblingElements();