用递归实现对无限级xml文档的遍历

 如何实现对无限级的xml的遍历呢?我们下面看看如何用递归实现:在这里我使用的是jdom1.0的包来解析xml

  1. /**
  2.  遍历无限级的xml文档
  3. */
  4. public  void iterator_XML(Document doc_in){
  5.         Document doc = doc_in;//你要处理的xml文档对象
  6.         Element root = doc.getRootElement();//获得根节点
  7.         List list = root.getChildren();//获得子结点的个数
  8.         if(list.size()>0)
  9.         {
  10.             path+="/"+root.getName();
  11.             Element ele = (Element)list.get(0);//第一个子元素
  12.             Element parent = ele.getParentElement();//子元素的父节点
  13.             //ele(ele,parent);
  14.             //elem(ele,parent);
  15.             ite_ele(ele,parent);//递归遍历的方法
  16.         }        
  17. }
  18. /**
  19. 对非根节点的遍历,判断它是否是叶子节点,并判断它的兄弟节点,并增加对空白的忽略处理
  20. */
  21. public  void ite_ele(Element ele,Element parent){
  22.         try{
  23.             Element e = ele;       
  24.             List list = parent.getChildren();
  25.             int index = list.indexOf(e);//获得非文本元素(普通节点元素)在父节点下的index
  26.             
  27.             System.out.println(">>"+index+"::"+e);
  28.             System.out.println(e.getName()+"---"+e.getValue());
  29.             
  30.                 if(e.getChildren().size()>0){//如果有子结点,查找子节点
  31.                     Element child = (Element)e.getChildren().get(0);//第一个子元素
  32.                     ite_ele(child,e);//递归调用                 
  33.                 }
  34.                 else{//只获得叶子节点的xpath值
  35.                     String xpath =XPathHelper.getPathString(e); //使用XPathHerper要加入jdom-contrib.jar这个包                               
  36.                     System.out.println("XPath:::" +xpath);
  37.                 }
  38.             //如果想的到所有节点的xpath值,而不仅仅是叶子节点的值,可以在此处写下面被注释掉的两行代码
  39.             //String xpath =XPathHelper.getPathString(e);                               
  40.             //System.out.println("XPath:::" +xpath);
  41.             
  42.             //下面的代码执行的时候,可以确定当前节点没有子节点。以下是查找兄弟节点            
  43.                 //判断是否越界,不越界则获得下一个兄弟节点
  44.                 if(index+1
  45.                 {  
  46.                     Element el = (Element)parent.getChildren().get(index+1);//本节点的下一个兄弟节点,(非空白)
  47.                     //System.out.println("inexe:  "+(index+1));
  48.                     ite_ele(el,parent);//递归调用
  49.                 }
  50.                 else{                   
  51.                     return;
  52.                 }
  53.         }
  54.         
  55.         catch(Exception e){
  56.             e.printStackTrace();
  57.         }                       
  58.     }
  59.     
  60.     

 

看看吧。希望对你有帮助

你可能感兴趣的:(XML技术)