2016-10-24 22 views
1

私は2つの兄弟ノードABを探しています。彼らはセレクタを満足させるでしょうjsoup経由で要素のペアを取得する方法は?

root.select("A ~ B") 

そしてセレクタはそのようなすべてのBを返します。

しかし、私はそのようなものが必要な場合はどうすればいいですか?A/Bペア?私は現在次のようにしています:

root.select("A").stream() 
     .filter(a -> a.parent() != null) 
     .forEach(a -> { 
      Element b = a.parent().select("B:gt(" + a.elementSiblingIndex() + ")").first(); 
      if (b != null) { 
       // do something with a and b 
      } 
     }); 

これはほぼ正しいイディオムですか? a.parent().select()はぎこちないようですが、私はそれを行う簡単な方法を見つけることができません。

+0

私はトラブルこれを視覚化を抱えている:あなたが使用したくない場合a.parent().select()あなたはsiblingElements()と同じ結果を得ることができますか? –

+0

私は質問を明確にするために書き直そうとしました。申し訳ありません。 – dkarp

+0

また、2番目の 'select'を' '' 'にする必要があります:root> B:gt(" + a.elementSiblingIndex()+ ")" '? – dkarp

答えて

0

あなたのアプローチに間違いはないと思います。あなたが取得しようとしている要素の完全なHTMLスニペットなどを投稿することができ、

root.select("A~B").stream().forEach(b -> { 
    List<Element> siblings = b.siblingElements().subList(0, b.elementSiblingIndex()); 
    Collections.reverse(siblings); 
    for (Element a : siblings) { 
     if(a.nodeName().equals(B)) break; 
     if(a.nodeName().equals(A)){ 
      // do something with a and b 
     } 
    } 
}); 
関連する問題