2017-04-18 139 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

如果答案是正確的,你應該標記它,以防止進一步的答覆等。 –