2013-04-17 26 views
6

jsoup Element.children()で、Elementのすべての子(子孫)を返します。しかし、私は要素の最初のレベルの子供(直接の子供たち)が欲しいです。jsoupの要素の第1レベルの子を取得する方法

どの方法を使用できますか?

+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

ループの内側では、このようにクリーンな方法で行うこともできます。 (要素elem:divChildren){ elem = elem.clone(); elem.empty(); detachedDivChildren.add(detachedChild); } – umar

1

いつでもELEMENT.child(インデックス)を使用して、あなたが望む子を選択できるインデックスを付けることができます。

+0

ありがとうございます。あなたが探している子供が分かっているときに便利です。私が実装しているアルゴリズムでは、わかりません。 – user1777220

+0

あなたはそれらを与えて、クラス内の例えばpredifnedインデックスを得て、それらのインデックスを取得するためにそのインデックスを使用できませんでしたか? –

+0

人生はそれより簡単にすべきです。要素の第1レベルの子を返すことは、ほとんどすべてのパーサがサポートする非常に基本的な方法です。インデックス作成の問題は、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の直系子孫の望ましいリストを与えるはずですまた、親要素を取得しようchild(int index)を経て最初の子ノードを取得し、siblingElements()を経由してこの子の兄弟を取得しようとすることができます

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

OR:ノードをアレント。

これは、使用された子を除いた第1レベルの子のリストを表示しますが、子を外部に追加する必要があります。

Elements firstLevelChildElements = doc.child(0).siblingElements(); 
関連する問題