下面我们主要写一下 解析XML文件的工具类,这个里面很多方法。我基本都贴出来,我也说过,解析XML有很多方法,我采用了最原始的。所以很累,你们自己去实现吧。
在这个类里面有几个关键点要说:
1.解析XML文档,就最开始定义的那个,最终返回是Map数据集
2.在次之间,可能需要涉及到生成统计图像等,都是在解析过程中完成的
3.在方法Map数据集中,如果是word中的表格,Key就是表格在word中的序列,我曾经说过,替换表格是按照序列来的;单个标签key就是标签本身作为key
4.注意反正很多细节的东西,我就不很细致的讲了
下面贴出部分代码:
1.总入口传入的是相关参数、报告类型:
/** * 返回 MAP 数据 * @return */ public HashMap<String,Object> returnValue(String peportXmlPath,Map<String,String> paramMap,String docType){ HashMap<String,Object> map = this.getAllData(peportXmlPath, paramMap,docType); return map; }
2.根据SQL语句执行查询,返回Map数据集
/** * 执行SQL查询 * @param peportXmlPath * @param paramMap * @param docType * @return */ public HashMap<String,Object> getAllData(String peportXmlPath,Map<String,String> paramMap,String docType){ conn = super.getSession().connection(); HashMap<String,Object> map = null; Map<String,List<DataGroupsBean>> sqlMap = getAllSql(peportXmlPath); map = new HashMap<String,Object>(); peportXmlPath = peportXmlPath.substring(peportXmlPath.lastIndexOf("/")+1,peportXmlPath.length()-4); //===============解析Rep标签开始==================== //if(sqlMap.get(peportXmlPath) != null && paramMap != null){//如果map不为空 //map = new HashMap<String,List<DataGroupsBean>>(); Set<Entry<String, List<DataGroupsBean>>> sets = sqlMap.entrySet(); Iterator<Entry<String, List<DataGroupsBean>>> it = sets.iterator(); while (it.hasNext()) { Map.Entry<String,List<DataGroupsBean>> mapEntry = (Map.Entry<String,List<DataGroupsBean>>)it.next(); //String key = String.valueOf(mapEntry.getKey()); List<DataGroupsBean> dataGroupsList = mapEntry.getValue(); if(dataGroupsList != null && dataGroupsList.size() > 0){ for (int i = 0; i < dataGroupsList.size(); i++) { DataGroupsBean dataGroupsBean = dataGroupsList.get(i); if(dataGroupsBean != null){ List<DataGroupBean> dataGroupList = dataGroupsBean.getDataGroupList(); if(dataGroupList != null && dataGroupList.size() > 0){ for (int j = 0; j < dataGroupList.size(); j++) { DataGroupBean dataGroupRepBean = dataGroupList.get(j);//取得报告bean if(dataGroupRepBean != null){ //String dataGroupRepName = dataGroupRepBean.getDataGroupName(); List<DataSetsBean> dataSetsRepList = dataGroupRepBean.getDataSetsList();//取得datasets list //处理 dataSetsRepList 相关内容 if(dataSetsRepList != null && dataSetsRepList.size() > 0){ for (DataSetsBean dataSetsRepBean : dataSetsRepList) { //String dataSetsRepName = dataSetsRepBean.getDataSetsName(); List<DataSetBean> dataSetRepList = dataSetsRepBean.getDataSetList(); if(dataSetRepList != null && dataSetRepList.size() > 0){//dataSetRep不为空 for (DataSetBean dataSetRepBean : dataSetRepList) { //String dataSetRepName = dataSetRepBean.getDataSetName(); String sqlStr = dataSetRepBean.getQueryString();//取得SQL语句 String sort = dataSetRepBean.getSort();//排序 List<FieldBean> fieldList = (List<FieldBean>)dataSetRepBean.getFieldList(); String type = dataSetRepBean.getType(); map = queryValue(map,sqlStr, paramMap, fieldList, type,conn,sort,docType);//调用方法 } } } } //处理 dataTranstorRepList 相关内容 //取得dataTranstor list List<DataTranstorBean> dataTranstorRepList = dataGroupRepBean.getDataTranstorList(); if(dataTranstorRepList != null && dataTranstorRepList.size() > 0){ for (DataTranstorBean dataTranstorRepBean : dataTranstorRepList) { //String dataTranstorsRepName = dataTranstorRepBean.getDataTranstorsName(); List<DataSetBean> dataSetRepList = dataTranstorRepBean.getDataSetList(); if(dataSetRepList != null && dataSetRepList.size() > 0){//dataSetRep不为空 for (DataSetBean dataSetRepBean : dataSetRepList) { String dataSetRepName = dataSetRepBean.getDataSetName(); String dataSetRepCnName = dataSetRepBean.getDataSetCnName();//中文名称 String sqlStr = dataSetRepBean.getQueryString();//取得SQL语句 List<FieldBean> fieldList = (List<FieldBean>)dataSetRepBean.getFieldList(); String type = dataSetRepBean.getType(); if(CommonUtils.isNotNull(type) && type.indexOf("CI") == -1){ for (FieldBean filedbean : fieldList) { String filedKey = filedbean.getKey(); String ctype = filedbean.getCtype(); String url = filedbean.getUrl(); if(CommonUtils.isNotNull(url)){ map.put(filedKey, XmlPathDef.getWordFValue(ctype,url)); } } }else{ map.put(dataSetRepName, this.getPhotoUrl(sqlStr,docType,paramMap,dataSetRepCnName,fieldList,conn,type)); } } } } } //===============解析Rep标签结束==================== } } } } } } } // } //关闭连接 XmlPathDef.closeComm(conn, stmt, rs); return map; }
3.解析相应的SQL语句,返回Map
/** * 解析比较 找出将要执行的SQL语句 * @param tagXmlPath * @param peportXmlPath * @return */ public Map<String,List<DataGroupsBean>> getAllSql(String peportXmlPath){ Map<String,DataGroupBean> dataGroupMap = mapData; Map<String,List<DataGroupsBean>> dataGroupsMap = parseReportInfo(peportXmlPath); peportXmlPath = peportXmlPath.substring(peportXmlPath.lastIndexOf("/")+1,peportXmlPath.length()-4); //===============解析Rep标签开始==================== //if(dataGroupsMap.get(peportXmlPath) != null){//如果map不为空 Set<Entry<String, List<DataGroupsBean>>> sets = dataGroupsMap.entrySet(); Iterator<Entry<String, List<DataGroupsBean>>> it = sets.iterator(); while (it.hasNext()) { Map.Entry<String,List<DataGroupsBean>> mapEntry = (Map.Entry<String,List<DataGroupsBean>>)it.next(); //String key = String.valueOf(mapEntry.getKey()); List<DataGroupsBean> dataGroupsList = mapEntry.getValue(); if(dataGroupsList != null && dataGroupsList.size() > 0){ for (int i = 0; i < dataGroupsList.size(); i++) { DataGroupsBean dataGroupsBean = dataGroupsList.get(i); if(dataGroupsBean != null){ List<DataGroupBean> dataGroupList = dataGroupsBean.getDataGroupList(); if(dataGroupList != null && dataGroupList.size() > 0){ for (int j = 0; j < dataGroupList.size(); j++) { DataGroupBean dataGroupRepBean = dataGroupList.get(j);//取得报告bean if(dataGroupRepBean != null){ String dataGroupRepName = dataGroupRepBean.getDataGroupName(); //取得datasets list List<DataSetsBean> dataSetsRepList = dataGroupRepBean.getDataSetsList(); if(dataSetsRepList != null && dataSetsRepList.size() > 0){ for (DataSetsBean dataSetsRepBean : dataSetsRepList) { String dataSetsRepName = dataSetsRepBean.getDataSetsName(); List<DataSetBean> dataSetRepList = dataSetsRepBean.getDataSetList(); if(dataSetRepList != null && dataSetRepList.size() > 0){//dataSetRep不为空 for (DataSetBean dataSetRepBean : dataSetRepList) { String dataSetRepName = dataSetRepBean.getDataSetName(); //===============解析Rep标签结束==================== //===============解析tag标签开始==================== //判断 dataGroupRepName 名称是否相同 if(dataGroupMap.get(dataGroupRepName) != null){//如果map不为空 Set<Entry<String, DataGroupBean>> set = dataGroupMap.entrySet(); Iterator<Entry<String, DataGroupBean>> its = set.iterator(); while (its.hasNext()) { Map.Entry<String,DataGroupBean> entry = (Map.Entry<String,DataGroupBean>)its.next(); DataGroupBean dataGroupTagBean = (DataGroupBean)entry.getValue();//取得标签bean //System.out.println(">>>>>>>>>>>>>>>>> "+ dataGroupTagBean); if(dataGroupTagBean != null){ List<DataSetsBean> dataSetsTagList = dataGroupTagBean.getDataSetsList(); if(dataSetsTagList != null && dataSetsTagList.size() > 0){ for (DataSetsBean dataSetsTagBean : dataSetsTagList) { String dataSetsTagName = dataSetsTagBean.getDataSetsName(); //判断 dataSets 名称是否相同 if(dataSetsRepName.equals(dataSetsTagName)){ List<DataSetBean> dataSetTagList = dataSetsTagBean.getDataSetList(); if(dataSetTagList != null && dataSetTagList.size() > 0){ for (DataSetBean dataSetTagBean : dataSetTagList) { String dataSetTagName = dataSetTagBean.getDataSetName(); //判断 dataSet 名称是否相同 if(dataSetRepName.equals(dataSetTagName)){ //System.out.println("sql++++++++++++++++++++++="+ dataSetTagBean.getQueryString()); //map.put(dataSetTagName, sql); dataSetRepBean.setQueryString(dataSetTagBean.getQueryString()); dataSetRepBean.setParameterList(dataSetTagBean.getParameterList()); dataSetRepBean.setDataSetCnName(dataSetTagBean.getDataSetCnName()); dataSetRepBean.setFieldList(dataSetTagBean.getFieldList()); dataSetRepBean.setType(dataSetTagBean.getType()); } } } } } } } } } //===============解析tag标签结束==================== //dataSetRepList.add(dataSetRepBean); } } } } //取得dataTranstor list List<DataTranstorBean> dataTranstorRepList = dataGroupRepBean.getDataTranstorList(); //===============解析tag标签开始==================== if(dataTranstorRepList != null && dataTranstorRepList.size() > 0){ for (DataTranstorBean dataTranstorRepBean : dataTranstorRepList) { String dataTranstorsRepName = dataTranstorRepBean.getDataTranstorsName(); List<DataSetBean> dataSetRepList = dataTranstorRepBean.getDataSetList(); if(dataSetRepList != null && dataSetRepList.size() > 0){//dataSetRep不为空 for (DataSetBean dataSetRepBean : dataSetRepList) { String dataSetRepName = dataSetRepBean.getDataSetName(); //判断 dataGroupRepName 名称是否相同 if(dataGroupMap.get(dataGroupRepName) != null){//如果map不为空 Set<Entry<String, DataGroupBean>> set = dataGroupMap.entrySet(); Iterator<Entry<String, DataGroupBean>> its = set.iterator(); while (its.hasNext()) { Map.Entry<String,DataGroupBean> entry = (Map.Entry<String,DataGroupBean>)its.next(); DataGroupBean dataGroupTagBean = (DataGroupBean)entry.getValue();//取得标签bean //System.out.println(">>>>>>>>>>>>>>>>> "+ dataGroupTagBean); if(dataGroupTagBean != null){ //List<DataSetsBean> dataSetsTagList = dataGroupTagBean.getDataSetsList(); //============暂未解析=============== List<DataTranstorBean> dataTranstorTagList = dataGroupTagBean.getDataTranstorList(); if(dataTranstorTagList != null && dataTranstorTagList.size() > 0){ for (DataTranstorBean dataTranstorTagBean : dataTranstorTagList) { String dataTranstorTagName = dataTranstorTagBean.getDataTranstorsName(); //判断 dataSets 名称是否相同 if(dataTranstorsRepName.equals(dataTranstorTagName)){ List<DataSetBean> dataSetTagList = dataTranstorTagBean.getDataSetList(); if(dataSetTagList != null && dataSetTagList.size() > 0){ for (DataSetBean dataSetTagBean : dataSetTagList) { String dataSetTagName = dataSetTagBean.getDataSetName(); //判断 dataSet 名称是否相同 if(dataSetRepName.equals(dataSetTagName)){ //System.out.println("sql++++++++++++++++++++++="+ dataSetTagBean.getQueryString()); //map.put(dataSetTagName, sql); dataSetRepBean.setQueryString(dataSetTagBean.getQueryString()); dataSetRepBean.setParameterList(dataSetTagBean.getParameterList()); dataSetRepBean.setFieldList(dataSetTagBean.getFieldList()); dataSetRepBean.setDataSetCnName(dataSetTagBean.getDataSetCnName()); dataSetRepBean.setType(dataSetTagBean.getType()); } } } } } } } } } } } } } //===============解析tag标签结束==================== //dataSetRepList.add(dataSetRepBean); } } } } } } } //} return dataGroupsMap; }
4.静态方法,xml只解析一次,下次同类型的就直接取
CreatPieForReport creatPieForReport; private static Map<String,DataGroupBean> mapData = new HashMap<String,DataGroupBean>(); static{ mapData = parseTagInfo(); }
5.解析xml标签(根据层级关系全部解析出来放入Map中)
/** * 解析 标签 XML文件 * @param xmlpath XML文件路径 * @return */ public static Map<String,DataGroupBean> parseTagInfo() { File f = new File(XmlPathDef.getTagPath()); //新建文件实例 //System.out.println(f); File[] list = f.listFiles(); /* 此处获取文件夹下的所有文件 */ Map<String,DataGroupBean> map = new HashMap(); SAXBuilder builder=new SAXBuilder(false); for(int i=0;i<list.length;i++){ //System.out.println("path:-------------" + XmlPathDef.getTagPath() + list[i].getName());//打印全路径 if(list[i].getName().substring(list[i].getName().length()-4, list[i].getName().length()).equals(".xml")){ String tagXmlPath = XmlPathDef.getTagPath() + list[i].getName(); try { Document xml = builder.build(tagXmlPath); Element root = xml.getRootElement(); DataGroupBean dataGroupBean = new DataGroupBean(); dataGroupBean.setDataGroupName(root.getAttributeValue(NAME)); List<Object> dataSetsOrTranstorList = root.getChildren(); //获取所有的子节点 List<DataSetsBean> dataSetsList = new ArrayList<DataSetsBean>(); List<DataTranstorBean> dataTranstorList = new ArrayList<DataTranstorBean>(); if(dataSetsOrTranstorList != null && dataSetsOrTranstorList.size()>0){ for(Iterator<Object> itfs = dataSetsOrTranstorList.iterator(); itfs.hasNext();) { Element dataSetssOrTranstorObj = (Element)itfs.next(); if(dataSetssOrTranstorObj.getAttributeValue(NAME).equals("dataSets")){ DataSetsBean dataSetsBean = getDataSetsBean(dataSetssOrTranstorObj); if(dataSetsBean != null){ dataSetsList.add(dataSetsBean); } dataGroupBean.setDataSetsList(dataSetsList); }else if(dataSetssOrTranstorObj.getAttributeValue(NAME).equals("dataTranstor")){//暂时未处理 DataTranstorBean dataTranstorBean = getDataTranstorBean(dataSetssOrTranstorObj); if(dataTranstorBean != null){ dataTranstorList.add(dataTranstorBean); } dataGroupBean.setDataTranstorList(dataTranstorList); } } } map.put(root.getAttributeValue(NAME), dataGroupBean); } catch (JDOMException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } return map; }
/** * 获取DataSetsBean对象列表 * @param dataSetsList */ public static DataSetsBean getDataSetsBean(Element dataSetsObj){ DataSetsBean dataSetsBean = null; if(dataSetsObj != null){ dataSetsBean = new DataSetsBean(); String dataSetsName = dataSetsObj.getAttributeValue(NAME); dataSetsBean.setDataSetsName(dataSetsName); List<Object> dataSetList = dataSetsObj.getChildren(); //获取 dataSet 所有的子节点 dataSetsBean.setDataSetList(getDataSetBean(dataSetList)); } return dataSetsBean; }
/** * 获取DataSetBean对象列表 * @param dataSetList */ public static List<DataSetBean> getDataSetBean(List<Object> dataSetList){ List<DataSetBean> list = new ArrayList<DataSetBean>(); DataSetBean dataSetBean = null; if(dataSetList != null && dataSetList.size()>0){ for(Iterator<Object> iter = dataSetList.iterator(); iter.hasNext();) { Element thirdObj = (Element)iter.next(); dataSetBean = new DataSetBean(); String dataSetName = thirdObj.getAttributeValue(NAME); //名称 dataSetBean.setDataSetName(dataSetName); String dataSetCnName = thirdObj.getAttributeValue(CNNAME); //中文名称 dataSetBean.setDataSetCnName(dataSetCnName); String dataSetType=thirdObj.getAttributeValue("type"); //类型 dataSetBean.setType(dataSetType); String queryString =thirdObj.getChildTextTrim("queryString"); dataSetBean.setQueryString(queryString); //获取查询的SQL语句 List<Object> parameterList = thirdObj.getChildren("parameter");//获取参数列表 dataSetBean.setParameterList(getParameterBean(parameterList)); List<Object> fieldList = thirdObj.getChildren("field");//获取查询字段列表 dataSetBean.setFieldList(getFieldBean(fieldList)); list.add(dataSetBean); } } return list; }
/** * 获取Filed对象列表 * @param fieldList */ public static List<FieldBean> getFieldBean(List<Object> fieldList){ List<FieldBean> list = new ArrayList<FieldBean>(); FieldBean fieldBean = null; int i = 1; if(fieldList != null && fieldList.size()>0){ for(Iterator<Object> iters = fieldList.iterator(); iters.hasNext();) { Element fourthObj = (Element)iters.next(); fieldBean = new FieldBean(); String key = fourthObj.getAttributeValue("key"); fieldBean.setKey(key); String fname = fourthObj.getAttributeValue(NAME); fieldBean.setName(fname); String column = fourthObj.getAttributeValue("column"); fieldBean.setColumn(column); String ctype = fourthObj.getAttributeValue("ctype"); fieldBean.setCtype(ctype); String url = fourthObj.getAttributeValue("url"); fieldBean.setUrl(url); String sort = fourthObj.getAttributeValue("sort"); if(CommonUtils.isNotNull(sort)){ fieldBean.setSort(sort); }else{ fieldBean.setSort(String.valueOf(i)); } list.add(fieldBean); i++; } } return list; }
/** * 获取 DataGroupsBean 对象列表 * @param dataGroupsList */ public List<DataGroupsBean> getReportDataGroupsBean(List<Object> dataGroupsList){ List<DataGroupsBean> list = new ArrayList<DataGroupsBean>(); DataGroupsBean dataGroupsBean = null; if(dataGroupsList != null && dataGroupsList.size()>0){ for(Iterator<Object> itfs = dataGroupsList.iterator(); itfs.hasNext();) { //遍历出所有的 dataGroups 列表 Element dataGroupsObj = (Element)itfs.next(); dataGroupsBean = new DataGroupsBean(); String dataGroupsName = dataGroupsObj.getAttributeValue(NAME); dataGroupsBean.setDataGroupsName(dataGroupsName); List<Object> dataGroupList = dataGroupsObj.getChildren(); //获取 dataGroup 所有的子节点列表 dataGroupsBean.setDataGroupsList(getReportDataGroupBean(dataGroupList)); list.add(dataGroupsBean); } } return list; }
/** * 获取DataGroupBean对象列表 * @param dataGroupList */ public List<DataGroupBean> getReportDataGroupBean(List<Object> dataGroupList){ List<DataGroupBean> list = new ArrayList<DataGroupBean>(); DataGroupBean dataGroupBean = null; if(dataGroupList != null && dataGroupList.size()>0){ for(Iterator<Object> iter = dataGroupList.iterator(); iter.hasNext();) { Element dataGroupObj = (Element)iter.next(); dataGroupBean = new DataGroupBean(); String dataGroupName = dataGroupObj.getAttributeValue(NAME); dataGroupBean.setDataGroupName(dataGroupName); List<Object> dataSetsOrTranstorList = dataGroupObj.getChildren(); //获取 dataSets 所有的子节点列表 List<DataSetsBean> dataSetsRepList = new ArrayList<DataSetsBean>(); List<DataTranstorBean> dataTranstorList = new ArrayList<DataTranstorBean>(); if(dataSetsOrTranstorList != null && dataSetsOrTranstorList.size()>0){ for(Iterator<Object> itfs = dataSetsOrTranstorList.iterator(); itfs.hasNext();) { Element dataSetOrTranstorObj = (Element)itfs.next(); String dataSetsName = dataSetOrTranstorObj.getAttributeValue(NAME); if(dataSetsName.equals("dataSets")){ DataSetsBean dataSetsBean = getReportDataSetsBean(dataSetOrTranstorObj); if(dataSetsBean != null){ dataSetsRepList.add(dataSetsBean); } dataGroupBean.setDataSetsList(dataSetsRepList); }else if(dataSetsName.equals("dataTranstor")){//暂时未处理 DataTranstorBean dataTranstorsBean = getReportDataTranstorBean(dataSetOrTranstorObj); if(dataTranstorsBean != null){ dataTranstorList.add(dataTranstorsBean); } dataGroupBean.setDataTranstorList(dataTranstorList); } } } list.add(dataGroupBean); } } return list; }
/** * 获取DataSetsBean对象列表 * @param dataSetsList */ public DataSetsBean getReportDataSetsBean(Element dataSetsObj){ DataSetsBean dataSetsBean = null; if(dataSetsObj != null){ dataSetsBean = new DataSetsBean(); String dataSetsName = dataSetsObj.getAttributeValue(NAME); dataSetsBean.setDataSetsName(dataSetsName); List<Object> dataSetList= dataSetsObj.getChildren(); //获取 dataSet 所有的子节点 dataSetsBean.setDataSetList(getReportDataSetBean(dataSetList)); } return dataSetsBean; }
/** * 获取 getReportDataTranstorBean 对象列表 * @param dataSetsList */ public DataTranstorBean getReportDataTranstorBean(Element transtorsObj){ DataTranstorBean dataTranstorsBean = null; if(transtorsObj != null){ dataTranstorsBean = new DataTranstorBean(); String dataTranstorName = transtorsObj.getAttributeValue(NAME); dataTranstorsBean.setDataTranstorsName(dataTranstorName); List<Object> dataSetList = transtorsObj.getChildren(); //获取 dataTranstor 所有的子节点 dataTranstorsBean.setDataSetList(getReportDataSetBean(dataSetList)); } return dataTranstorsBean; }
/** * 获取ReportDataSetBean对象列表 * @param dataSetList */ public List<DataSetBean> getReportDataSetBean(List<Object> dataSetList){ List<DataSetBean> list = new ArrayList<DataSetBean>(); DataSetBean dataSetBean = null; if(dataSetList != null && dataSetList.size()>0){ for(Iterator<Object> iter1 = dataSetList.iterator(); iter1.hasNext();) { Element dataSetObj = (Element)iter1.next(); dataSetBean = new DataSetBean(); String dataSetName = dataSetObj.getAttributeValue(NAME); String sort = dataSetObj.getAttributeValue("sort"); dataSetBean.setDataSetName(dataSetName); dataSetBean.setSort(sort==null?"":sort); list.add(dataSetBean); } } return list; }
/** * 解析定义的报告 XML文件 * @param xmlpath XML文件路径 * @return */ public Map<String,List<DataGroupsBean>> parseReportInfo(String peportXmlPath) { Map<String,List<DataGroupsBean>> map = null; SAXBuilder builder=new SAXBuilder(false); Document xml; try { xml = builder.build(peportXmlPath); Element root = xml.getRootElement(); List<Object> dataGroupsList = root.getChildren(); //获取所有的子节点 List<DataGroupsBean> dataGroupsBean = getReportDataGroupsBean(dataGroupsList); map = new HashMap<String,List<DataGroupsBean>>(); map.put(root.getAttributeValue(NAME), dataGroupsBean); } catch (JDOMException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return map; }
(未完待续)