数据:
id                       name                       lel 
1                公共信息分类编码                     1
48                 行政区域代码                     2
c200                     华南                        3
c1                        广东                         4
c201                    华东                           3
29             各地区名称编码                          2
39               行业分类以代码                       2递归的XML格式(层次无限)
<?xml version="1.0" encoding="UTF-8"?>
<node id=1 lel=1 name=公共信息分类编码>
<node id = 48  lel =2  name = 行政区域代码>
<node  id = c200 lel =3 name = 华南>
<node  id = c1 lel = 4 name=广东 />
</node>
<node  id = c201 lel = 3 name=华东 />
</node>
<node  id = 29 lel = 2 name=各地区名称编码 />
<node  id = 39 lel = 2 name=行业分类以代码 />
</node>

解决方案 »

  1.   

    你的node应该还要有一个pid,就是3级的应该加在那个第2级的上面啊 ,要不然那么多2级节点,该怎么加啊 ?
      

  2.   

    以前写了个没有pId的.但是层次是固定的.!.
    想想有个pId是要方便点 .............多谢指点 .
      

  3.   

    楼主这是要做什么?Element.elements()判断是否有子结点,有就接着递归,没有就输出。
      

  4.   

    拿以前的代码稍微改了改//数据对象
    public class SmMenu {
    private String id;
    private String pid;//父节点ID
    private String lel;
    private String name;
    //存放子节点集合
    private List<SmMenu> menuList;
    // setter and getter
    ...
    }

    public List<SmMenu> getMenuTree() {
    List<SmMenu> menuList = new ArrayList<SmMenu>();
    //从数据库查询到所有数据
    List<SmMenu> allList=this.findAll();
    Map<String,SmMenu> map=new HashMap<String,SmMenu>();
    for(SmMenu bo : allList){
    map.put(bo.getId(), bo);
    if(bo.getPid()==null){
    //存放顶级节点到一个集合
    menuList.add(bo);
    }
    }
    //存放子节点集合
    for(SmMenu bo : allList){
    if(bo.getPid()!=null){
    SmMenu parent=map.get(bo.getPid());
    parent.getMenuList().add(bo);
    }
    } return menuList;
    }
    //递归得到最终的xml结构数据
    public String getXML(List<SmMenu> list){
    StringBuffer xmlNode  = new StringBuffer();

    for(SmMenu bo : allList){
    xmlNode.append("<node ");
    xmlNode.append("id='"+bo.getId()+"' ");
    xmlNode.append("pid='"+bo.getPid()+"' ");
    xmlNode.append("lel='"+bo.getLel()+"' ");
    xmlNode.append("name='"+bo.getName()+"' ");

    if(bo.getMenuList()!=null && bo.getMenuList().size()>0){
    xmlNode.append(">\n");
    xmlNode.append(this.getXML());
    xmlNode.append("\n");
    xmlNode.append("</node>");
    }else{
    xmlNode.append("/>");
    }
    }
    return xmlNode.toString();
    }

    public void test(){
    System.out.println(this.getXML(this.getMenuTree()));
    }
      

  5.   

    你得有个Pid的;挂钩上级目录;找他的pid比较方便吧;