Jsoup选择和迭代所有元素

34

我将通过jsoup连接到一个url,并获取其所有内容,但问题是如果我选择了像这样的内容:

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>

如果我使用body标签进行选择,结果会在一行中显示:

Test Hello All Second Page Test

我想选择所有元素,逐个迭代并生成结果,例如:

Test
Hello All
Second Page
Test

使用jsoup能够实现这个吗?

谢谢,
Karthik

3个回答

63
你可以使用 * 选择器选择文档的所有元素,然后使用 Element#ownText() 分别获取每个元素的文本。
Elements elements = document.body().select("*");

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

1
这个也产生了相同的输出,有什么想法吗? - Karthik
1
那么它们不是身体的直接子元素,就像你在问题中展示的那样。我会更新答案。 - BalusC
3
你应该使用document.getAllElements()代替选择器。请参见https://jsoup.org/apidocs/org/jsoup/nodes/Element.html#getAllElements-- - Snackaholic
我遇到了错误:“只能迭代数组或java.lang.iterable的实例”。 - ReZ

5
使用jsoup库获取文档主体内的所有元素: doc.body().children().select("*"); 只获取文档主体内第一层元素: doc.body().children();

1
这是一个重要的区别,从其他答案中并不立即明显。谢谢。为了获取文档主体的第一级元素及其子元素(第二个示例),而不是主体标签内所有元素的平面列表(第一个示例)。 - Murrah

0

您可以使用XPath或任何包含XPath的库

表达式是//text()

使用您的XML here 测试表达式


你能详细说明一下 xpath 如何与 jsoup 交互吗? - Thufir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接