【问题标题】:How to get child elements that descend directly from parent with Jsoup?如何使用 Jsoup 获取直接从父级下降的子元素?
【发布时间】:2013-01-27 07:06:59
【问题描述】:

你使用 Jsoup 来获取一个网站。该网站有多个 div 类,例如:

<div class="itemcategories">
Category: <a id="cat_result_7_newamerican" class="category" rel="newamerican" href="/search?cflt=newamerican&amp;find_loc=willowbrook%2C+IL">American (New)</a>
</div>

<div class="itemcategories">
Categories: 
<a id="cat_result_6_breakfast_brunch" class="category" rel="breakfast_brunch" href="/search?cflt=breakfast_brunch&amp;find_loc=willowbrook%2C+IL">Breakfast & Brunch</a>, 
<a id="cat_result_6_tradamerican" class="category" rel="tradamerican" href="/search?cflt=tradamerican&amp;find_loc=willowbrook%2C+IL">American (Traditional)</a>
</div>

等等。

如果我使用以下查询选择器:

categories = doc.select("div[class=itemcategories] > a[class=category]");

每个直接从 div class="itemcategories" 父元素下降的子元素都存储在类别元素对象的下一个索引中。所以我无法确定哪些孩子属于哪些父母。有没有办法“连接”每个 div 类中的所有子级并将它们保存在 Elements 对象的单独索引中?

【问题讨论】:

    标签: android jsoup


    【解决方案1】:

    分两步做怎么样?

    Elements parents = doc.select("div.itemcategories");
    for (Element parent : parents)
    {
        Elements categories = parent.select("a.category");
        // do something with categories
    }
    

    注意使用.foo 而不是[class=foo] 选择器语法。

    注意我对 jsoup 的 API 不是很熟悉,所以这段代码可能并不完全正确。

    【讨论】:

    • 感谢您的及时回复。它帮助我创建了另一个一步解决方案。
    【解决方案2】:

    除了@Matt Ball 解决方案之外,我还想出了一步解决方案:

    // Select the parent's
    categories = doc.select(".itemcategories");
    

    然后简单地使用 children() 方法来获取孩子和 text() 方法来获取所需的文本:

    categories.get(counter).children().text();
    

    【讨论】:

    • 好吧,我不会把那一步称为:P
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    相关资源
    最近更新 更多