不说废话,直接上代码:
import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; import java.io.File; import java.util.Iterator; public class Recursion { void findNode(Element elm) { for (Iterator sub = elm.elementIterator(); sub.hasNext(); ) { org.dom4j.Element subelm = (Element) sub.next(); if (subelm.getName().equals("FTC")) {//输出已经找到的节点,或者对节点进行递归嵌套,例如在该"FTC"节点里寻找"DBC"类型节点 System.out.println(subelm.attributeValue("name")); } else { findNode(subelm);//继续递归寻找"FTC"类型节点 } } } public static void main(String[] args) { File file = new File("res/test.xml"); SAXReader reader = new SAXReader(); Document doc = null; try { doc = reader.read(file); } catch (DocumentException e) { e.printStackTrace(); } Recursion recursion = new Recursion(); recursion.findNode(doc.getRootElement()); } }
该程序依赖dom4j jar包,已通过测试运行,由于采用迭代器进行递归,程序耗用资源比较少。有的xml递归采用elementNode.elements()方法获取节点Llist,再对每一个element进行迭代,这将耗用更多内存资源。