我有一个html文件,我想使用第一个div标签the image display the html file structure遍历该文件 我的代码是
public static void ExtractChild(String content) {
String data = content;
ArrayList<String> childList = new ArrayList<String>();
try{
Document document = Jsoup.parse(data);
Element div = document.select("div").first();
Elements divChildren = div.children();
int size = divChildren.size();
if (size > 0) {
for (int i = 0; i < size; i++) {
data = divChildren.get(i).toString();
System.out.println(data);
ExtractChild(data);
}
} else {
childList.add(data);
}
}
catch(Exception e)
{System.out.println(e.getMessage());
}
}
} `
我得到一个Html文件作为字符串首先我捕获第一个div标签并获取所有所有孩子。在我的形象中,父母有3个孩子,第一个孩子有2个孩子。 我正在添加孩子,如果它没有任何子子(否则部分)问题发生在If部分当它找到子子时它重置i的值并且它不能回溯。
答案 0 :(得分:2)
您想要使用Jsoup API中的NodeTraversor及其伴随类NodeVisitor。
NodeTraversor 以递归方式遍历节点树。每次命中节点的开始标记或结束标记(如果存在)时,它都会调用给定的 NodeVisitor 。
public static void main(String[] args) throws IOException {
String html = "<div id=\"d1\">" + //
"<div id=\"d1.0\">" + //
"<div id=\"d1.0.0\">" + //
"1.0.0" + //
"</div>" + //
"<div id=\"d1.0.1\">" + //
"1.0.1" + //
"</div>" + //
"</div>" + //
"<div id=\"d1.1\">" + //
"1.1" + //
"</div>" + //
"<div id=\"d1.3\">" + //
"1.3" + //
"</div>" + //
"</div>";
List<String> childList = new ArrayList<>();
NodeVisitor myNodeVisitor = new MyNodeVisitor(childList);
NodeTraversor traversor = new NodeTraversor(myNodeVisitor);
Document doc = Jsoup.parse(html);
Element firstDiv = doc.select("div:first-of-type").first();
if (firstDiv == null) {
System.err.println("Unable to find any div.");
} else {
traversor.traverse(firstDiv);
for (String child : childList) {
System.out.println(child);
}
}
}
private static class MyNodeVisitor implements NodeVisitor {
private List<String> childList;
public MyNodeVisitor(List<String> childList) {
if (childList == null) {
throw new NullPointerException("child cannot be null.");
}
this.childList = childList;
}
@Override
public void head(Node node, int depth) {
if (node.childNodeSize() == 0) {
childList.add(node.toString());
}
}
@Override
public void tail(Node node, int depth) {
}
}
1.0.0
1.0.1
1.1
1.3