2011-08-12 309 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 

相反,我想選擇所有的元素和遍歷一個接一個,併產生結果一樣,

Test 
Hello All 
Second Page 
Test 

將使用jsoup這可能嗎?

感謝,
KARTHIK

回答

47

您可以選擇所有該文檔的元素使用*選擇器,然後分別使用Element#ownText()獲取每個文本的文本。

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

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

不,這也產生了相同的輸出,任何想法? – Karthik

+1

然後它就像你在你的問題中所展示的那樣,不是身體的直接子女。我會更新答案。 – BalusC

+0

感謝隊友的魅力。 – Karthik

0

您可以使用XPath或任何庫,它包含的XPath

表達是//text()

測試你的XML表達here

1

使用jsoup庫獲取文檔正文內的所有元素。

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

得到公正的文檔體元素元素的第一級。

doc.body().children();

+0

這是一個重要的區別,從其他答案中不能立即看出。謝謝。獲取文檔主體和*他們的子元素的第一級元素(第二個例子),而不是body標籤中所有元素的平面列表(第一個例子)。 – Murrah