如何实现对无限级的xml的遍历呢?我们下面看看如何用递归实现:在这里我使用的是jdom1.0的包来解析xml
- /**
- 遍历无限级的xml文档
- */
- public void iterator_XML(Document doc_in){
- Document doc = doc_in;//你要处理的xml文档对象
- Element root = doc.getRootElement();//获得根节点
- List list = root.getChildren();//获得子结点的个数
- if(list.size()>0)
- {
- path+="/"+root.getName();
- Element ele = (Element)list.get(0);//第一个子元素
- Element parent = ele.getParentElement();//子元素的父节点
- //ele(ele,parent);
- //elem(ele,parent);
- ite_ele(ele,parent);//递归遍历的方法
- }
- }
- /**
- 对非根节点的遍历,判断它是否是叶子节点,并判断它的兄弟节点,并增加对空白的忽略处理
- */
- public void ite_ele(Element ele,Element parent){
- try{
- Element e = ele;
- List list = parent.getChildren();
- int index = list.indexOf(e);//获得非文本元素(普通节点元素)在父节点下的index
- System.out.println(">>"+index+"::"+e);
- System.out.println(e.getName()+"---"+e.getValue());
- if(e.getChildren().size()>0){//如果有子结点,查找子节点
- Element child = (Element)e.getChildren().get(0);//第一个子元素
- ite_ele(child,e);//递归调用
- }
- else{//只获得叶子节点的xpath值
- String xpath =XPathHelper.getPathString(e); //使用XPathHerper要加入jdom-contrib.jar这个包
- System.out.println("XPath:::" +xpath);
- }
- //如果想的到所有节点的xpath值,而不仅仅是叶子节点的值,可以在此处写下面被注释掉的两行代码
- //String xpath =XPathHelper.getPathString(e);
- //System.out.println("XPath:::" +xpath);
- //下面的代码执行的时候,可以确定当前节点没有子节点。以下是查找兄弟节点
- //判断是否越界,不越界则获得下一个兄弟节点
- if(index+1<parent.getChildren().size())
- {
- Element el = (Element)parent.getChildren().get(index+1);//本节点的下一个兄弟节点,(非空白)
- //System.out.println("inexe: "+(index+1));
- ite_ele(el,parent);//递归调用
- }
- else{
- return;
- }
- }
- catch(Exception e){
- e.printStackTrace();
- }
- }
看看吧。希望对你有帮助