【问题标题】:Android : Retrieve multiples Elements from Html using JSoupAndroid:使用 JSoup 从 Html 中检索多个元素
【发布时间】:2016-03-26 01:09:12
【问题描述】:

我想从 divstart hourend hour 中检索 title,所有这些都从名为 day 的大 div 和另一个名为 eventdiv 中检索

我需要将这些items 转换为list,但现在我被困在这里,因为它无法检索我的3 elements

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());

    }
}

【问题讨论】:

    标签: java android jsoup


    【解决方案1】:

    该文档中没有一个只有day 作为类参数的div。他们都有day 类与另一个类结合起来防止div[class=day] 找到这样的div。同样的问题也适用于div[class=event] 选择器。

    为了解决这个问题,请使用 CSS 查询语法,其中 . 运算符用于描述类属性
    (提示:如果要选择类较少的元素,可以使用element.class1.class2)。

    所以不是

    select("div[class=day]");
    select("div[class=event]");
    

    使用

    select("div.day");
    select("div.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 right top
    • @yoyani 如果你有一个包含三个类的 div :bub 右下角,使用下面的 CSS 查询来选择它:div.bub.right.bottom
    • @yoyani 就像我在回答中所说的那样,如果你有许多类的元素,你可以使用表单element.class1.class2,所以可以使用 CSS 查询 div.bub.right.bottom 选择类 bub right bottom 的 div。但是如果你想找到只有这些类的 div (并且在class= 属性中没有提到其他类,那么select("div[class=bub right bottom]") 应该可以正常工作。
    • 更准确地说,如果我们有像 <div class='bar foo'> <div class='foo bar'> <div class='foo bar baz'> 这样的 div,那么 div.foo.bar 会找到它们(尽管类属性中值的顺序和事实上可能有更多类比选择)。但是div[class=foo bar] 只会找到<div class='foo bar'>(其余部分将被忽略,因为[attribute=text] 选择器将文本作为字符串与'bar foo'!='foo bar' 进行比较,foo bar baz 也是如此)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    • 2020-10-01
    • 2016-04-18
    • 1970-01-01
    相关资源
    最近更新 更多