这是我无法解决的问题。我有一个.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;
}
通常情况下,如果执行条件,则循环应根据中断停止,但这不会发生。我还有一个关于添加标签的想法。 (它在代码中被注释掉了)但它也不起作用。递归开始并擦除变量 searchingElement 值。 我找到了一个解决方案,但它看起来很难看,我想知道上面添加的代码不起作用。我的解决方案是添加而不是递归调用 findElement(child,nameOfElement); 这段代码:
Element el = findElement(child, nameOfElement);
if (el != null && el.getName().toLowerCase().equals((nameOfElement).toLowerCase())) {
searchedElement = el;
return searchedElement;
}
请帮助找到解决方案!
答案 0 :(得分: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;
}
答案 1 :(得分: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;
}