2017-04-19 34 views
0

这是我无法解决的问题。我有一个.xml文件,不是与父母和孩子,但与大孩子和多孙子。每个元素名称都是唯一的,所以我需要一个方法来查找并返回可搜索元素。到目前为止我的代码:如何在循环中使用递归方法退出?

public static Element findElement(Element current, String nameOfElement) { 
      Element searchedElement = null; // this element I want to return 
      List children = current.getChildren(); // current is a root element passed to method 
      Iterator iterator = children.iterator(); 
      //label: 
      while (iterator.hasNext()) { 
       Element child = (Element)iterator.next(); 
       if (child.getName().equals(nameOfElement)) { 
        searchedElement = child; // on some level it founds it 
        System.out.println("!!!"); // it's just a marker to see that action happens 
        //break label; 
        break; 
       } 
       findElement(child, nameOfElement); 
      } 
      return searchedElement;  
     } 

正常情况下,如果执行条件周期应根据打破阻止,但这种情况不会发生。另外我有一个关于添加标签的想法。 (它在代码中有注释),但它也不起作用。递归启动并清除变量搜索元素的值。 我找到了一个解决方案,但它看起来很丑,我不知道上面添加的代码不起作用。我的解决方案是添加而不是递归调用findElement(child,nameOfElement);此编号:

Element el = findElement(child, nameOfElement); 
      if (el != null && el.getName().toLowerCase().equals((nameOfElement).toLowerCase())) { 
       searchedElement = el; 
       return searchedElement; 
      } 

请帮忙找解!

+1

'findElement(儿童,nameOfElement);'你丢弃递归调用的返回值(你不要将它存储在'searledElement'中)。 –

回答

1

尝试的价值,

public static Element findElement(Element current, String nameOfElement) { 
     Element searchedElement = null; // this element I want to return 
     List children = current.getChildren(); // current is a root element passed to method 
     Iterator iterator = children.iterator(); 
     //label: 
     while (iterator.hasNext()) { 
      Element child = (Element)iterator.next(); 
      if (child.getName().equals(nameOfElement)) { 
       searchedElement = child; // on some level it founds it 
       System.out.println("!!!"); // it's just a marker to see that action happens 
       //break label; 
       break; 
      } 
      searchElement = findElement(child, nameOfElement); 
      if(searchElement != null) 
       return searchElement; 

     } 
     return searchedElement;  
    } 
+0

这应该工作,并有'equalsIgnoreCase'为'等于' – janith1024

+0

感谢您的意见 –

0

你只需要返回递归调用

public static Element findElement(Element current, String nameOfElement) { 
     Element searchedElement = null; // this element I want to return 
     List children = current.getChildren(); // current is a root element passed to method 
     Iterator iterator = children.iterator(); 
     //label: 
     while (iterator.hasNext()) { 
      Element child = (Element)iterator.next(); 
      if (child.getName().equals(nameOfElement)) { 
       searchedElement = child; // on some level it founds it 
       System.out.println("!!!"); // it's just a marker to see that action happens 
       //break label; 
       break; 
      } 
      searchedElement = findElement(child, nameOfElement);//HERE !!! 
     } 
     return searchedElement;  
    } 
+0

已验证。这不起作用。但无论如何感谢您花费您的时间 –