2017-04-18 134 views
0

我使用Jsoup解析器,并希望进行一些递归调用,找出所有配衬我的关键字标签.. 的问题是,调用堆栈与第一标签时,发现没有孩子结束,(如果是第一个测试),并且不关闭其他电话。堆栈缺少递归调用Java的

public Set<Element> deepSearch(Element node,String keyword) 
{ 
    Pattern searchKeyPattern= Pattern.compile(keyword); 
    Set<Element> matchedTags = new HashSet<Element>(); 
    System.out.println("Node name = " + node.tagName()+" || Node children = " + node.children().size()); 
    if(searchKeyPattern.matcher(node.ownText()).find()) 
    { 
     matchedTags.add(node); 
     System.out.println("matched"); 
    } 
    if(node.childNodeSize()==0) 
    { 
     System.out.println("No children found"); 
     return matchedTags; 
    } 
    else 
    { 
     System.out.println("else the recursive nested call"); 
     return deepSearch(node.children().iterator().next(),keyword); 
    } 
} 

这是控制台打印结果:

节点名称= HTML ||节点children = 2 else递归嵌套调用 Node name = head ||节点children = 10 else递归嵌套调用 Node name = meta ||子节点= 0没有发现孩子

这个网址我用于测试的是这个link

有一个问题,我的电话,什么我错过?!

回答

0

的方法失败的原因是,你正在使用的每个你迭代到下一个发生时间孩子们在元素()方法。在每次调用中,您要深入1级,而当您从元标记中的html> head> meta进入时,没有孩子,因此代码失败。由于我编写了一些依赖于Jsoup的Web爬虫,因此请随时向我发送一条消息以帮助您处理代码。

IMO你是过于复杂的方式,你正在寻找的电话号码。只需解析文档并获取ID为“result”的元素,因为这是存储要提取的电话号码的ol(有序列表)。使用.text()方法,你将得到你正在寻找的东西。

+0

感谢亚历克斯的答复,至于你说的问题是与迭代器,我相信,我有一个改变了它的循环,知道它返回更多的标签..电话号码只是测试,我希望找到一个标签与一个特定的关键字,而不是电话号码.. –

+0

如果答案是正确的,你应该标记它,以防止进一步的答复等。 –