1.xml文件形式
2.利用dom4j来解析xml文件
(1)准备dom4j-1.6.1-sources.jar包
(2)读取xml文件,获取document对象
SAXReader reader=new SAXReader(); Document document=reader.read(new File(xmlPath));3.要想将xml文件转化为json,就是将xml文件先转化为Java对象,然后再转化为json
4.建一个product对象
private String id; private String name; private String parentRef; private List<Product> children;此处set、get方法省略,
5.获取文档的根节点
Element ele=document.getRootElement(); //迭代当前节点下面的所有子节点 Iterator<Element> iterator = node.elementIterator(); while(iterator.hasNext()){ Element element = iterator.next(); Product product = new Product(); product.setName(element.attributeValue("name")); //属性名称 product.setId(element.attributeValue("id")); product.setParentRef(element.attributeValue("parentRef")); //System.out.println(product.toString()); proList.add(product); getNodes(element,proList); }6.获得所有的节点之后,将所有的节点放入rootProducts(这是个List集合)中,然后将节点转化为product对象
for(Product rootProduct:rootProducts){ List<Product> children = new ArrayList<>(); for(Product childProduct:rootProducts){ //System.out.println(rootProduct.toString()); //根据属性来确认父子关系 if(rootProduct.getId().equals(childProduct.getParentRef())){ children.add(childProduct); } Product pro=new Product(); rootProduct.setChildren(children); } if("".equals(rootProduct.getParentRef())){ parentProductList.add(rootProduct); } }7.接下来就该把product对象转化为JSONObject
(1)在product对象内写一个方法toJson();
public JSONObject toJson(){ JSONObject jsonObject=new JSONObject(); jsonObject.put("id", this.getId()); jsonObject.put("text", this.getName()); if(this.children!=null){ JSONArray jsonArray=new JSONArray(); for(Product child:this.children){ jsonArray.add(child.toJson()); } if(!(jsonArray.isEmpty())){ jsonObject.put("leaf", false); jsonObject.put("expanded", true); jsonObject.put("children", jsonArray); }else{ jsonObject.put("leaf", true); } } return jsonObject; }(2)进而得到所有节点的JSONObject
public static String getJSON(List<Product> productList){ JSONArray json=new JSONArray(); for(Product pro:productList){ json.add(pro.toJson()); } JSONObject rootObj=new JSONObject(); rootObj.put("children", json); rootObj.put("text", "项目"); rootObj.put("expanded", true); String jsonStr=rootObj.toString(); //System.out.println(rootObj.toString()); //System.out.println(jsonStr); return jsonStr; }8.在jsp页面上获取到该jsonStr然后用extjs展示出来
Ext.onReady(function () { //树的节点数据源 var node =<%=jsonNode %> //树面板(本地数据源) var treelocal = new Ext.tree.TreePanel({ title: '项目分类', //rootVisible: false, root: node }); //单表 var form = new Ext.form.FormPanel({ frame: true, //title: '项目分类', style: 'margin:10px', items: [treelocal], buttons: [{ text: '确定', handler: function () { selectNode = treelocal.getSelectionModel().getSelectedNode(); if(selectNode==null){ lert("请选择项目类型~"); } else{ var nodeIdPath=selectNode.getPath(); var length=nodeIdPath.split("/").length; var nodeNamePath=""; for(var i=1;i<length;i++){ var arr=nodeIdPath.split("/"); //根据id找到节点,获取节点的text var arrName=treelocal.getNodeById(arr[i]).text; nodeNamePath+=arrName+"/"; } nodeNamePath=nodeNamePath.substring(0,nodeNamePath.length-1) window.opener.document.getElementById("projectSorts").value=nodeNamePath; window.close(); } } },{ text: '取消', handler: function () { window.close(); } }] }); //窗体 var win = new Ext.Window({ //title: '', width: 476, height: 574, resizable: true, //modal: true, closable: false, maximizable: false, minimizable: false, items: form }); win.show(); });
9.最后展示的结果是: