在jsoup中解析元素内的元素?

时间:2012-01-23 13:55:22

标签: java android jsoup

最近开始编写Android Java(Eclipse),我试图使用jsoup创建一个简单的阅读器应用程序。

我有这样的HTML;

<article id="id" class="artikel">
<h1>Title</h1>
<p>paragraph 1</p>
<p>paragraph 2</p>
<p>paragraph 3</p>
</article>

<article id="id">
<p>comment1</p>
</article>

<article id="id">
<p>comment2</p>
</article>

段落数量是可变的。评论的数量也是如此。 我想得到文章中的所有段落,没有评论。 真正的文章总是第一篇文章标签,所以我使用first()结合通配符来获取它。

这是Im使用的方法;

public String GetArticleBody(Document adoc)
{
    //Document totalbody = (Document)adoc.select("article *").first();
    //Element totalbody = adoc.select("article *").first();
    //Elements paragraphs = adoc.select("article * > p);
    Elements paragraphs = adoc.select(".article* p");
    String body = "test";
    for (Element p : paragraphs)
    {
        body = StringAttacher(body, p.text());
    }
    System.out.println(body);
    return body;
}

正如你所看到的那样,我一直在使用食谱中的方法和我在SOF上找到的一些方法。 从所有这些方法中我所得到的只是测试一词或者根本没有。

有人能指出我正确的方向来获取这些段落吗?

1 个答案:

答案 0 :(得分:2)

您遇到的问题是在第一个语句中使用了错误的选择器。

.是“类”选择器,所以你要么“文章”拼写错误,要么你不应该.

请改为尝试:

public String GetArticleBody(Document adoc)
{
    //Document totalbody = (Document)adoc.select("article *").first();
    //Element totalbody = adoc.select("article *").first();
    //Elements paragraphs = adoc.select("article * > p);
    Elements paragraphs = adoc.select("article").first().select("p");
    String body = "test";
    for (Element p : paragraphs)
    {
        body = StringAttacher(body, p.text());
    }
    System.out.println(body);
    return body;
}

这将为您提供第一篇文章中的段落。

此外,通常有助于记住jsoup选择器与CSS选择器(以及jQuery选择器的子集)中使用的选择器相同。您从其他领域获得的任何知识都可以直接用于jsoup。