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