2017-04-18 6 views
0

Jsoup 파서를 사용 중이고 내 키워드와 일치하는 모든 태그를 찾기 위해 재귀 호출을하고 싶습니다. 문제는 스택 호출이 자식이 발견되지 않으면 첫 번째 태그로 끝나는 것입니다 , (테스트의 첫 번째 경우) 나머지 통화를 마칩니다.재귀 호출에서 스택 누락 Java

노드 이름 = HTML || :

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

는 콘솔 인쇄의 결과입니다 노드 children = 2 else 재귀 적 중첩 호출 노드 이름 = head || 노드 children = 10 else 재귀 중첩 호출 노드 이름 = 메타 || 노드 아이들은 = 0 어떤 아이들은

내가 테스트에 사용이 URL을 찾을 수 없습니다이 link

문제가 내 전화로 거기에, 또는 내가 뭔가 놓치고있다?!

답변

0

메서드가 실패하는 이유는 다음에 반복 할 때마다 Element에서 children() 메서드를 사용하고 있기 때문입니다. 각 호출마다 1 레벨이 더 깊어지고, 메타 태그 안의 html> head> meta에서 자식이 없으므로 코드가 실패합니다. Jsoup에 종속 된 몇 가지 웹 크롤러를 코딩 했으므로 코드에 도움이되는 메시지를 보내주십시오.

IMO 당신이 전화 번호를 찾는 방식을 복잡하게 만든다. 문서를 파싱하고 추출하려는 전화 번호가 저장된 ol (ordered-list)이므로 ID "result"가있는 요소를 가져옵니다. .text() 메소드를 사용하면 찾고있는 것을 얻을 수 있습니다.

+0

답장을 보내 주신 데 감사드립니다. 문제는 iterator가 내가 믿기 때문에 반복문을 사용하여 바뀌었고 더 많은 태그를 반환한다는 것을 알았습니다. 전화 번호는 테스트 용이며 태그를 찾으려고합니다. 전화 번호가 아닌 특정 키워드를 사용하십시오 .. –

+0

답변이 정확하다면 추가 답장 등을 막기 위해 표시해야합니다. –