你用dom4j  jdom 来做很简单

解决方案 »

  1.   

    目前使用Iterator<TestFile> it = list.iterator();while (it.hasNext()) {file = it.next(); 这样方式只能显示所有数据,不能分层次显示出来,急求解决办法。应该是需要递归,未实现出来。
      

  2.   

    这个算法本身不算复杂,主要就两个个关键点:
    1、利用Oracle提供的父子连接:connect by prior my_id = parent_id; 就可以得到有序结果。
    2、写一个递归函数来根据结果集产生带层次结构的XML就行了。
      

  3.   


    import java.io.FileWriter;
    import java.io.IOException;import org.dom4j.Document;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.XMLWriter;
    import org.xml.sax.DocumentHandler;public class BuildBookDemo {//将数据加载到xml    /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            String[][] data={
                    {"1001","wuxia","tianlongbabu1","50","jinyong","1968","cn"},
                    {"1002","wuxia","tianlongbabu2","50","jinyong","1968","cn"},
                    {"1003","xuanhuan","tianlongbabu3","50","jinyong","1968","cn"},
                    {"1004","wuxia","tianlongbabu4","50","jinyong","1968","cn"}
            };
            buildBook(data,"mybook.xml");    }
        public static void buildBook(String[][] data,String filename){
            Document doc=DocumentHelper.createDocument();
            Element rootElmt=doc.addElement("booklist");
            for(String[] book:data){
                Element bookElmt=rootElmt.addElement("book");
                Element title=bookElmt.addElement("title");
                title.setText(book[2]);
                Element prise=bookElmt.addElement("price");
                prise.setText(book[3]);
                Element author=bookElmt.addElement("author");
                author.setText(book[4]);
                Element year=bookElmt.addElement("year");
                year.setText(book[5]);
                bookElmt.addAttribute("isbn",book[0]);
                bookElmt.addAttribute("catalog",book[1]);
                title.addAttribute("lang", book[6]);
                
            }
            outputXml(doc,filename);
        }
        private static void outputXml(Document doc, String filename) {
            // TODO Auto-generated method stub
            try {
                FileWriter fw=new FileWriter(filename);
                OutputFormat format=OutputFormat.createPrettyPrint();
                format.setEncoding("utf-8");
                XMLWriter xw=new XMLWriter(fw,format);
                xw.write(doc);
                xw.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        }
    数据读出来,生产xml
      

  4.   

    思路好说,用递归
    fun(int pid,grade){
    String sql ="select * from table where pid ="+pid;
    //求出结果放入List<List<String>> lists 把 id ,pid 成对放入list中
    遍历list
    for(List alist:lists){
    int count=1;
    String str ="<file" + pid==0?"":count + " id=\""+ alist.get(0) +"\" parentid=\""+alist.get(1) +"\"> \r\n </file" + pid==0?"":count> \r\n";
    fun(alist.get(0),grade+1);
    count++;
    }
    }
      

  5.   

    尝试写个伪代码:
    String export(rs, upperid) {
      if (upperid == 0) rs.next();
      String ret = "";
      while (!rs.eof()) {
        String pid = rs.get(pid);
        if (pid.equals(upperid)) {
          String id = rs.get(id);
          ret += "<file " ....;
          if (rs.next()) ret += export(rs, id);
          ret +="</file>";
        } else {
          break;
        }
      }
      return ret;
    }执行:export(rs, 0);