这是我无法解决的问题。我有一个 .xml 文件,不是与 parent 和 child 有关,而是与孙子和多孙子有关。每个元素名称都是唯一的,因此我需要一种方法来查找并返回可搜索元素。到目前为止我的代码:
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;
}
正常情况下,当if条件执行时,循环应该根据break停止,但这种情况不会发生。我还有一个关于添加标签的想法。 (它在代码中被注释)但它也不起作用。递归开始并删除变量 searchedElement 值。 我找到了一个解决方案,但它看起来很丑,我想知道上面添加的代码不起作用。我的解决方案是添加以下代码而不是递归调用 findElement(child, nameOfElement);:
Element el = findElement(child, nameOfElement);
if (el != null && el.getName().toLowerCase().equals((nameOfElement).toLowerCase())) {
searchedElement = el;
return searchedElement;
}
请帮忙寻找解决方案!
最佳答案
尝试,
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;
}
关于java - 如何退出while循环,里面有递归方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43490243/