2011-08-12 18 views
18

będzie połączyć się z adresem URL poprzez jsoup i uzyskać wszystkie treści niego, ale chodzi o to, czy mogę wybrać jak,Jsoup wybrać i iteracyjne wszystkie elementy

doc.select("body") 

jego powrocie pojedynczy element, ale chcę, aby uzyskać wszystkie elementy na stronie i iteracyjne je jeden po drugim na przykład

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

Jeśli wybiorę za pomocą ciała otrzymuję wynik w jednej linii podobnego

Test Hello All Second Page Test 

Zamiast tego chcę, aby zaznaczyć wszystkie elementy i iteracyjne jeden po drugim i wywołania skutków, takich jak,

Test 
Hello All 
Second Page 
Test 

Czy to będzie możliwe przy użyciu jsoup?

Dzięki,
Karthik

Odpowiedz

47

Można wybrać wszystko elementy dokumentu za pomocą selektora *, a następnie uzyskać tekst każdego z nich indywidualnie za pomocą Element#ownText().

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

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

Nie jest to również do tego samego wyjścia, jakiś pomysł? – Karthik

+1

To nie są bezpośrednie dzieci ciała, jak pokazałeś w swoim pytaniu. Zaktualizuję odpowiedź. – BalusC

+0

Dzięki kolega działa jak urok. – Karthik

0

Można użyć XPath lub dowolnej biblioteki, które zawierają XPath

wyrażenie jest //text()

testowe wyrażenie z xml here

1

Aby uzyskać wszystkie elementy w treści dokumentu za pomocą biblioteki jsoup.

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

Aby uzyskać tylko pierwszy poziom elementów w elementach dokumentów ustrojowych.

doc.body().children();

+0

Jest to ważne rozróżnienie, które nie jest od razu oczywiste z innych odpowiedzi. Dzięki. Aby uzyskać elementy pierwszego poziomu treści dokumentu i * ich * dzieci (drugi przykład), w przeciwieństwie do płaskiej listy wszystkich elementów w obrębie znacznika body (pierwszy przykład). – Murrah

Powiązane problemy