在第一级的jsoup中提取元素,没有递归

时间:2014-10-02 17:31:51

标签: java html jsoup

我有这个HTML。我需要" li"。我使用.select(" li"),但在每个" li"中,可能还有另一个" li"但我不感兴趣。我只想要" li"在第一级。 有可能吗?

<div id="id">
    <ul>
        <li>  
            <div>
                <ul>
                    <li> ........ </li>
                </ul>
            </div>      
        </li>
        <li> ........ </li>
        <li> ........ </li>
        <li> ........ </li>
        <li> ........ </li>
        <li> ........ </li>
        .
        .
        .
    </ul>
</div>

3 个答案:

答案 0 :(得分:3)

它更简单 - 使用CSS选择器,如

Document.select('div#id > ul > li')

使用&#34;&gt;&#34;你告诉所有你想要的是给定DOM元素的第一级孩子。看看这段代码 - https://gist.github.com/wololock/621a42546cac6dd0daa2你可以简单地将它作为一个groovy脚本运行。

答案 1 :(得分:2)

当然是:

Elements documentElements = document.getElementsByTag("id"); //get the div
Element theList= documentElements.get(0); //get the unordered list
Element listItem = theList.child(0); //this is the first list item in that unordered list

这个答案假设您已经加载了HTML并准备好JSoup Document进行遍历

参考:

答案 2 :(得分:1)

您必须使用CSS选择器>来指定您只想要直接子项。

这可以相对完成,如下例所示:

Element div = Jsoup.parseBodyFragment("<div id="id">...</div>").body();
div.select(">div>ul>li"); // this will return all li under the first ul

从ul元素中检索所有第一级li

ul.select(">li");

或以绝对方式(参见@Szymon回答):

Document.select('div#id > ul > li')