xmind文件转excel文件,java实现

主要思路

1.解压缩xmind文件;
2.解析xml文件,储存数据到list;
3.将list写入excel文件;

本文主要讨论第二步,解析xml文件并保存到list。

解析xml文件

在此之前先定义一个ArrayList LinkedList String类型的变量als,用于保存每一条excel的数据

获取xml文件的根节点

Element root=document.getRootElement();//获取根节点  

然后递归遍历所有节点

this.getNodes(root);//从根节点开始遍历所有节点  
   接下来是遍历和给list赋值的方法,主要思路是:

   当每找到一个这样的节点(topic中只有一个title),也就是topic的子节点list.length() ==1,首先我们给als new 一个LinkedList,因为每一个这样的节点意味着excel表中将多一条数据,接着还要给这个被new的list赋值。

   接着我们复制一个这样的节点,用这个复制的节点向上找名字为topic的父节点,每找到一个这样的父节点,我们就可以这样做:
if(nodePa.getName().equals("topic")){
    List<Element> e = nodePa.elements();
    als.get(als.size()-1).add(0, e.get(0).getTextTrim());
}
   也就是将这个topic节点中的title的值插入到linkedlist中的第一位,直到找到根节点,这样可以将一条完整的路径表现出来。

   当找到根节点后,我们继续从那个被复制的节点开始遍历。

核心代码

//递归遍历节点
    public void getNodes(Element node){  

    //递归遍历当前节点所有的子节点  
       List<Element> listElement=node.elements(); 

     //遍历所有一级子节点
       for(Element e:listElement){ 
           List<Element> ee = e.elements();

           //找到最后一个节点
           if(e.getName().equals("topic") && ee.size() == 1){
               LinkedList<String> ls = new LinkedList<>();
               ls.add(ee.get(0).getTextTrim());
               als.add(ls);

               Element nodePa = e.getParent();

               //回溯路径给list赋值
               while(!nodePa.getName().equals("sheet")){

                   if(nodePa.getName().equals("topic")){
                       List<Element> eee = nodePa.elements();
                       als.get(als.size()-1).add(0, eee.get(0).getTextTrim());
                   }
                   nodePa = nodePa.getParent();
               }  
           }

         //递归遍历
           this.getNodes(e);  
        }  
    }

详细请下载
http://download.csdn.net/detail/explodingstar/9908962

展开阅读全文

没有更多推荐了,返回首页