2011-08-12 13 views
18

私はjsoupを通じてURLに接続し、それのすべての内容を取得するが、私のような選択した場合の事はある、Jsoupすべての要素を選択し、反復

doc.select("body") 

そのは、単一の要素を返すが、私は取得したいでしょうすべてのページの要素とそれらを例えば一つ一つを繰り返す、

<html> 
<head><title>Test</title></head> 
<body> 
<p>Hello All</p> 
<a href="test.html">Second Page</a> 
<div>Test</div> 
</body> 
</html> 

私は

Test Hello All Second Page Test 
、ように私は1行で結果を取得しています身体を使って選択した場合210

代わりに、私はすべての要素を選択し、一つ一つを反復など結果を生成したい、

Test 
Hello All 
Second Page 
Test 

はそれがjsoup使用可能でしょうか?

おかげで、
カルティク

答えて

47

あなたはすべてを選択することができます文書の要素を*セレクタを使用して入力し、Element#ownText()を使用してそれぞれのテキストを個別に取得します。

Elements elements = document.body().select("*"); 

for (Element element : elements) { 
    System.out.println(element.ownText()); 
} 
+1

ありません、これはまた、任意のアイデアを、同じ出力を生成していますか? – Karthik

+1

あなたの質問で実証したように、それは体の直接の子供ではありません。私は答えを更新します。 – BalusC

+0

感謝の仲間は魅力のように動作します。 – Karthik

0

あなたは表現が//text()

テストあなたのXMLを使用した表現であるXPathの

が含まれているのXPathまたは任意のライブラリを使用することができますhere

1

jsoupライブラリを使用して、ドキュメントの本文内のすべての要素を取得します。

doc.body().children().select("*");

文書のbody要素内の要素のちょうど最初のレベルを取得します。

doc.body().children();

+0

それは他の回答からすぐには分かりませんが、それは重要な違いです。ありがとう。 bodyタグ内のすべての要素のフラットなリスト(最初の例)ではなく、ドキュメント本体とその子要素の第1レベルの要素を取得する(2番目の例)。 – Murrah

関連する問題