问题描述
由于项目需要,需要开发一颗树来展示各元素之间的层级关系,选用了DhtmlTree树控件来实现前台树代码如下:public class TransListToXML {/** * 生成document * @return document * */public static Document generateXML(){List<Organization> orgList = TransListToXML.getOrgList();Document doc = DocumentHelper.createDocument();Element root = doc.addElement("root");for(Organization org:orgList){Element orgPre = root.addElement(org.getName());for(Organization orgs:orgList){if((org.getId()).equals(orgs.getParentid())){orgPre.addElement(orgs.getName());}}}//Element category = root.addElement("category");//Element id = category.addElement("id");//id.addAttribute("name","id");//id.addText("malongchao");return doc;}/** * 写入XMl文件 * @param document所要写入的文件内容 * @param outFile文件存放的地址 * */public static void writeDocument(Document docment,String outFile){try {FileOutputStream fileWriter = new FileOutputStream(outFile);//读取文件OutputFormat xmlFormat = OutputFormat.createPrettyPrint();//设置文件格式xmlFormat.setEncoding("utf-8");XMLWriter xmlWriter = new XMLWriter(fileWriter,xmlFormat);//创建写文件方法xmlWriter.write(docment);//写入文件xmlWriter.close();} catch (IOException e) {// TODO Auto-generated catch blockSystem.out.println("文件没有找到");e.printStackTrace();}}/** * 获取组织机构列表信息 * @return orgList 组织机构信息列表 * */public static List<Organization> getOrgList(){String configLocation = "applicationContext.xml";ApplicationContext context = new ClassPathXmlApplicationContext(configLocation);OrganizationService orgSer = (OrganizationService)context.getBean("organizationService");List<Organization> orgList = orgSer.getAllOrgization();return orgList;}public static void main(String[] args){Document doc = TransListToXML.generateXML();String outFile = "d://result.xml";writeDocument(doc, outFile);}} 需要的输出结果为 <root> <北京> <北京/> <海淀区> <奥运村/> <丰台区/> <七里庄/> <北大地/> <卢沟桥/> </海淀区> <中关村/> <上地/> </北京></root> 但是目前实际的输出结果为:<?xml version="1.0" encoding="utf-8"?><root> <北京> <北京/> <海淀区/> <中关村/> <上地/> </北京> <海淀区> <奥运村/> <丰台区/> <七里庄/> <北大地/> <卢沟桥/> </海淀区> <中关村/> <上地/> <奥运村/> <丰台区/> <七里庄/> <北大地/> <卢沟桥/></root> 恳请各路大神指点,小弟现在这里谢过了
解决方案
部门查询方法有问题,先获取北京,再获取北京下其他直属部门拼XML,用一个递归,一级一级往下查,拼接
解决方案二:
for(Organization org:orgList){ Element orgPre = root.addElement(org.getName()); for(Organization orgs:orgList){ if((org.getId()).equals(orgs.getParentid())){ orgPre.addElement(orgs.getName()); } } } ----------------------->如果只有两级树的话for(Organization org:orgList){ //找一级节点写入root 否则continue; Element orgPre = root.addElement(org.getName()); //找二级节点 for(Organization orgs:orgList){ if((org.getId()).equals(orgs.getParentid())){ orgPre.addElement(orgs.getName()); } } } 如果多级的话 就需哟递归完成//1、写一级节点//2、循环一级节点 递归找其他级别节点