9

在 jsoupElement.children()中返回 Element 的所有子项(后代)。但是,我想要元素的第一级孩子(直接孩子)。

我可以使用哪种方法?

4

4 回答 4

13

Element.children() 仅返回直接子级。既然你把他们绑在树上,他们也有孩子。

如果您需要没有底层树结构的直接子元素,那么您需要按如下方式创建它们

public static void main(String... args) {

    Document document = Jsoup
            .parse("<div><ul><li>11</li><li>22</li></ul><p>ppp<span>sp</span</p></div>");

    Element div = document.select("div").first();
    Elements divChildren = div.children();

    Elements detachedDivChildren = new Elements();
    for (Element elem : divChildren) {
        Element detachedChild = new Element(Tag.valueOf(elem.tagName()),
                elem.baseUri(), elem.attributes().clone());
        detachedDivChildren.add(detachedChild);
    }

    System.out.println(divChildren.size());
    for (Element elem : divChildren) {
        System.out.println(elem.tagName());
    }

    System.out.println("\ndivChildren content: \n" + divChildren);

    System.out.println("\ndetachedDivChildren content: \n"
            + detachedDivChildren);
}

输出

2
ul
p

divChildren content: 
<ul>
 <li>11</li>
 <li>22</li>
</ul>
<p>ppp<span>sp</span></p>

detachedDivChildren content: 
<ul></ul>
<p></p>
于 2013-04-28T05:46:10.660 回答
2

这应该为您提供所需的父节点的直接后代列表:

Elements firstLevelChildElements = doc.select("parent-tag > *");

或者您也可以尝试检索父元素,通过 获取第一个子节点child(int index),然后尝试通过 检索该子节点的兄弟姐妹siblingElements()

这将为您提供不包括已使用子项的第一级子项列表,但是您必须在外部添加子项。

Elements firstLevelChildElements = doc.child(0).siblingElements();
于 2016-04-19T11:03:49.100 回答
1

您始终可以将 ELEMENT.child(index) 与索引一起使用,您可以选择您想要的孩子。

于 2013-04-17T13:09:16.410 回答
0

在这里可以得到一级children的值

 Element addDetails = doc.select("div.container > div.main-content > div.clearfix > div.col_7.post-info > ul.no-bullet").first();
    Elements divChildren = addDetails.children();
    for (Element elem : divChildren) {
       System.out.println(elem.text());
                }
于 2015-04-30T10:35:49.173 回答