在jsoup中,
我应该使用哪个方法?
Element.children()
返回Element的所有子代。但是,我想要Element的一级子元素(直接子元素)。我应该使用哪个方法?
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>
Elements firstLevelChildElements = doc.select("parent-tag > *");
或者您也可以尝试检索父元素,通过child(int index)
获取第一个子节点,然后尝试通过siblingElements()
检索此子节点的兄弟节点。
这将为您提供第一级子节点列表,不包括已使用的子节点,但是您需要在外部添加子节点。
Elements firstLevelChildElements = doc.child(0).siblingElements();
在这里,您可以获取一级子元素的值
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());
}
Element.children()
返回直接子元素,不是吗?如果你有疑问,可以尝试使用Element.children().size()
。 - Vitaly