Java Android:使用JSoup从Html检索多个元素

Java Android:使用JSoup从Html检索多个元素,java,android,jsoup,Java,Android,Jsoup,我想从div中检索标题,开始时间和结束时间所有这些都是从一个名为day的大型div中检索的,在另一个名为event的div中检索的 我需要将这些项目放入列表,但现在我被困在这里,因为它无法检索我的3个元素 Document doc = Jsoup.connect("http://terry.gonguet.com/cal/?g=tp11").get(); Elements days = doc.select("div[class=day]"); Elements event = doc.sele

我想从
div
中检索
标题
开始时间
结束时间
所有这些都是从一个名为
day
的大型
div中检索的,在另一个名为
event
div中检索的

我需要将这些
项目
放入
列表
,但现在我被困在这里,因为它无法检索我的
3个元素

Document doc = Jsoup.connect("http://terry.gonguet.com/cal/?g=tp11").get();
Elements days = doc.select("div[class=day]");
Elements event = doc.select("div[class=event]");
for(Element day : days)
{
    System.out.println(" : " + day.text());
    for(Element ev : event)
    {

        Element title = ev.select("div[class=title]").first();
        Element starthour = ev.select("div[class=bub right top]").first();
        Element endhour = ev.select("div[class=bub right bottom]").first();
        System.out.println(title.text()+starthour.text()+endhour.text());

    }
}

该文档中没有一个div只有
day
作为类参数。它们都有
day
类与另一个类组合,该类阻止
div[class=day]
找到此类div。同样的问题也适用于
div[class=event]
选择器

要解决此问题,请使用CSS查询语法,其中使用
运算符来描述类属性
(提示:如果要选择类很少的元素,可以使用
element.class1.class2

所以不是

select("div[class=day]");
select("div[class=event]");
ev.select("div[class=bub right top]");
ev.select("div[class=bub right bottom]");
使用

也代替

select("div[class=day]");
select("div[class=event]");
ev.select("div[class=bub right top]");
ev.select("div[class=bub right bottom]");
你可以尝试使用

ev.select("div.bub.right.top");
ev.select("div.bub.right.bottom]");

这将允许您找到包含所有这些类的div(即使它们的顺序不同,或者选择器中提到了更多的类)。

我不能确切地说您想要获得哪些元素,因此我无法进一步帮助您。请随意对这个答案发表评论(有帮助吗,你还有其他问题吗)。好吧,这样看起来效果更好。唯一有效的想法是,我正在尝试让一个div作为3个类:bub右下角,这样我也可以得到一个元素?同样的道理:bub对吗top@yoyani如果您有一个包含三个类的div:bub right bottom,请使用以下CSS查询来选择它:
div.bub.right.bottom
@yoyani正如我在回答中所说,如果您有包含许多类的元素,则可以使用表单
element.class1.class2
,因此,可以使用CSS查询
div.bub.right.bottom
选择类为
bub right-bottom
的div。但是如果你想找到只有这些类的div(并且在
class=
属性中没有提到其他类),那么
选择(“div[class=bub right-bottom]”
应该可以。更准确地说,如果我们有像
这样的div.foo.bar
会找到它们(尽管类属性中的值的顺序不同,而且可能有比所选的更多的类)。但是
div[class=foo bar]
将只找到
(其余部分将被忽略,因为
[attribute=text]
选择器正在将文本作为字符串与
'bar foo'!='foo bar'
,与
foo bar baz
相同)。