【问题标题】:Jsoup select and iterate all elementsJsoup选择并迭代所有元素
【发布时间】:2011-10-25 13:35:01
【问题描述】:

我将通过 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>

如果我选择使用正文,我会在一行中得到结果,例如,

Test Hello All Second Page Test

相反,我想选择所有元素并一一迭代并产生类似的结果,

Test
Hello All
Second Page
Test

使用 jsoup 可以吗?

谢谢,
卡提克

【问题讨论】:

    标签: java jsoup


    【解决方案1】:

    您可以使用* 选择器选择文档的所有元素,然后使用Element#ownText() 分别获取每个元素的文本。

    Elements elements = document.body().select("*");
    
    for (Element element : elements) {
        System.out.println(element.ownText());
    }
    

    【讨论】:

    • 不,这也产生相同的输出,知道吗?
    • 那么,正如您在问题中所证明的那样,它不是身体的直接孩子。我会更新答案。
    • 你应该使用 document.getAllElements() 代替那个选择器。见jsoup.org/apidocs/org/jsoup/nodes/Element.html#getAllElements--
    • 我收到错误“只能遍历数组或 java.lang.iterable 的实例”
    【解决方案2】:

    使用 jsoup 库获取文档正文中的所有元素。

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

    仅获取文档正文元素中的第一级元素。

    doc.body().children();

    【讨论】:

    • 这是一个重要的区别,在其他答案中并不明显。谢谢。获取文档正文的第一级元素及其它们的子元素(第二个示例),而不是正文标记中所有元素的平面列表(第一个示例)。
    【解决方案3】:

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

    表达式是//text()

    用你的 xml here 测试表达式

    【讨论】:

    • 您能详细说明xpath 与jsoup 的交互方式吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    • 2015-02-19
    • 2011-09-23
    • 1970-01-01
    相关资源
    最近更新 更多