如何使用Jsoup获取直接从父级下降的子元素?

时间:2013-02-12 03:02:05

标签: android jsoup

你使用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”父级下降的每个子元素都存储在Elements对象的下一个索引中。所以我无法确定哪些孩子属于哪个父母。有没有办法'连接'每个div类中的所有子节点并将它们保存在Elements对象的单独索引中?

2 个答案:

答案 0 :(得分:3)

如何分两步完成?

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

请注意使用.foo代替[class=foo]选择器语法。

N.B。我对jsoup的API并不十分熟悉,所以这段代码可能不完全正确。

答案 1 :(得分:0)

除了@Matt Ball解决方案,我已经找到了一步解决方案:

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

然后只需使用children()方法获取children和text()方法即可获得所需的文本:

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