Java 如何在jsoup中获取元素的第一级子元素

Java 如何在jsoup中获取元素的第一级子元素,java,jsoup,Java,Jsoup,在jsoupElement.children()中,返回元素的所有子元素(子元素)。但是,我需要元素的第一级子元素(直接子元素) 我可以用哪种方法 您可以始终将ELEMENT.child(index)与索引一起使用,您可以选择所需的子元素。ELEMENT.children()仅返回直接子元素。因为你把他们绑在树上,他们也有孩子 如果需要没有底层树结构的直接子元素,则需要按如下方式创建它们 public static void main(String... args) { Documen

在jsoup
Element.children()
中,返回元素的所有子元素(子元素)。但是,我需要元素的第一级子元素(直接子元素)


我可以用哪种方法

您可以始终将ELEMENT.child(index)与索引一起使用,您可以选择所需的子元素。

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);
}
publicstaticvoidmain(字符串…参数){
Document=Jsoup

.parse(“
  • 11
  • 22
  • pppsp在这里您可以获得一级子级的值

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

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

    Elements firstLevelChildElements = doc.select("parent-tag > *");
    
    或者您也可以尝试检索父元素,通过
    child(int index)
    获取第一个子节点,然后尝试通过
    siblingElements()
    检索此子节点的同级节点

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

    Elements firstLevelChildElements = doc.child(0).siblingElements();
    

    谢谢。当你知道你在寻找哪个子元素时,它会很有用。在我正在实现的算法中,我不知道。你能不能在类中给出它们和预定义的索引,并使用该索引来获取它们?生活应该比它更简单。返回元素的第一级子元素是一种非常基本的方法,几乎所有解析器都支持。t索引的问题是,我不知道元素有多少个直接子元素。此外,似乎索引是从叶子到父元素进行的,这使得使用它们变得困难。嗯,我知道你总是可以使用第一种方法获得所有元素,通过猜测第一个元素是直接子元素,你总是可以将它放在一个表中或者只获取第一个查找它最后:父级>子级:直接从父级派生的子元素,例如div.content>p查找p元素;body>*查找body标记的直接子级。
    Element.children()
    返回直接子级,不是吗?如果您有疑问,请尝试
    Element.children().size()
    。我尝试了这个方法。它返回所有子项(子项和子项的子项)。您如何尝试?在循环中,它也可以像这样以更简洁的方式完成。对于(元素elem:divChildren){elem=elem.clone();elem.empty();detachedDivChildren.add(detachedChildren);}
    Elements firstLevelChildElements = doc.child(0).siblingElements();