浏览 1523 次
锁定老帖子 主题:xml文件相关操作
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-04-15
<root> <enum name="emtype"> <des>类型</des> <item> <from>4028808f044f871201045025b4180900</from> <to></to> <des>公司统一采购</des> </item> <item> <from>4028808f044f871201045025e2050902</from> <to></to> <des>部门采购</des> </item> <item> <from>4028808f044f871201045025f9740904</from> <to></to> <des>特殊采购</des> </item> </enum> <enum name="emstatus"> <des>阶段</des> <item> <from>4028808f044f87120104503579a90906</from> <to></to> <des>新建</des> </item> <item> <from>4028808f044f87120104503597640908</from> <to></to> <des>选型/询价</des> </item> <item> <from>4028808f044f871201045035b03b090a</from> <to></to> <des>商务谈判</des> </item> <item> <from>4028808f044f871201045035c7a9090c</from> <to></to> <des>已签约</des> </item> <item> <from>4028808f044f871201045035e320090e</from> <to></to> <des>已完成</des> </item> <item> <from>4028808f044f871201045035f0940910</from> <to></to> <des>已放弃</des> </item> </enum> <enum name="emcloseresult"> <des>关闭结果</des> <item> <from>4028808f044f8712010450363bce0912</from> <to></to> <des>成功</des> </item> <item> <from>4028808f044f87120104503652100914</from> <to></to> <des>失败</des> </item> <item> <from>4028808f044f8712010450365f7b0916</from> <to></to> <des>搁置</des> </item> </enum> <enum name="emaudit"> <des>审核状态</des> <item> <from>402880900bb2d155010bb2fcd9ec04ec</from> <to></to> <des>新建</des> </item> <item> <from>402880900bb2d155010bb2fcf4c204ee</from> <to></to> <des>已提交</des> </item> <item> <from>402880900bb2d155010bb2fd110104f0</from> <to></to> <des>已审核</des> </item> <item> <from>402880900bb2d155010bb2fd30b004f2</from> <to></to> <des>已拒绝</des> </item> </enum> </root> EnumMapping.java package com.metasoft.framework.si.eai.parse; public class EnumMapping { private String from; private String to; private String desc; public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } public String getFrom() { return from; } public void setFrom(String from) { this.from = from; } public String getTo() { return to; } public void setTo(String to) { this.to = to; } } EnumMappingHelper package com.metasoft.framework.si.eai.parse; import java.util.HashSet; import java.util.Hashtable; public class EnumMappingHelper { private static Hashtable enumMapping = new Hashtable(); /** * 获取映射关系TableMping的唯一外部接口 * * @param key * key: meta表名+"_"+外部表名 * @param tablMappXml * 表映射xml文件路径 * @param fieldMappXml * 字段映射的xml文件路径 * @return TableMpping 返回指定映射的详细信息 */ public static HashSet getEnumMapping(String key,String enumMappXml) { if (enumMapping.get(key) == null) { MappingReader.parseEnumMappingXML(enumMappXml); } return (HashSet) enumMapping.get(key); } protected static Hashtable getEnumMapping() { return enumMapping; } } MappingReader package com.metasoft.framework.si.eai.parse; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.HashSet; import java.util.Hashtable; import java.util.Iterator; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.dom4j.io.XPPReader; import org.gjt.xpp.XmlPullParserException; /** * 表映射,字段映射文件解析 * * @author zr.peng * * @since 2008-4-2 */ class MappingReader { /** * 表映射,字段映射文件解析 * * @param tablMappXml * 表间映射的xml文件路径 * @param fieldMappXml * 字段间映射的xml文件路径 */ protected static void parseMappingXML(String tablMappXml, String fieldMappXml) { SAXReader saxReader = new SAXReader(); try { Document xmlDoc = saxReader.read(new File(tablMappXml)); Element root = xmlDoc.getRootElement(); Iterator it = root.elementIterator(); while (it.hasNext()) { TableMapping t_map = new TableMapping(); Element e = (Element) it.next(); Element from = e.element("from"); Attribute from_id = from.attribute("id"); Attribute from_ref = from.attribute("ref"); Element to = e.element("to"); Attribute to_id = to.attribute("id"); Attribute to_ref = to.attribute("ref"); Element desc = e.element("desc"); t_map.setFrom_table(from.getText()); t_map.setTo_table(to.getText()); t_map.setFrom_table_id(from_id.getText()); t_map.setFrom_table_ref(from_ref.getText()); t_map.setTo_table_id(to_id.getText()); t_map.setTo_table_ref(to_ref.getText()); t_map.setDescription(desc.getText()); { Element navigate = e.element("navigate"); HashSet f_map = getFieldMapping(fieldMappXml, navigate .getText().trim());// 获取表中字段间的映射关系 t_map.setFieldMapping(f_map); } String key = from.getText().trim().toLowerCase(); //+ "_" + to.getText().trim(); TableMappingHelper.getTablMapping().put(key, t_map);// 放入缓存中 } } catch (DocumentException e) { e.printStackTrace(); } } /** * * @param fieldMappXml * 字段间映射的xml文件路径 * @param id * 表映射的xml文件中的navagate指向 字段间映射的xml文件 identify * @return FieldMapping对象的HashSet集合 */ private static HashSet getFieldMapping(String fieldMappXml, String id) { HashSet mappings = new HashSet(); XPPReader xr = new XPPReader(); org.dom4j.Document dom = null; try { dom = xr.read(new FileInputStream(fieldMappXml)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (DocumentException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); } Element eltField = (Element) dom .selectSingleNode("/field_mapping/mappig[@identify='" + id + "']"); Iterator it = eltField.elementIterator(); while (it.hasNext()) { FieldMapping f_map = new FieldMapping(); ; Element e = (Element) it.next(); Element from = e.element("from"); Element to = e.element("to"); Element type = e.element("type"); Element desc = e.element("desc"); f_map.setFrom_field(from.getText()); f_map.setTo_field(to.getText()); f_map.setType(type.getText()); f_map.setDescription(desc.getText()); mappings.add(f_map); } return mappings; } public static void parseEnumMappingXML(String enumMappXml) { SAXReader saxReader = new SAXReader(); try { Document xmlDoc = saxReader.read(new File(enumMappXml)); Element root = xmlDoc.getRootElement(); Iterator it = root.elementIterator(); while(it.hasNext()){ HashSet enumMapps=new HashSet(); Element e=(Element)it.next(); String arrName=e.attribute("name").getText(); //System.out.println(arrName); Iterator it2=e.elementIterator("item"); while(it2.hasNext()){ EnumMapping em=new EnumMapping(); Element eee=(Element)it2.next(); //System.out.println(" desc:"+eee.element("des").getText()); //System.out.println(" from:"+eee.element("from").getText()); //System.out.println(" to :"+eee.element("to").getText()); em.setDesc(eee.element("des").getText()); em.setFrom(eee.element("from").getText()); em.setTo(eee.element("to").getText()); enumMapps.add(em); } EnumMappingHelper.getEnumMapping().put(arrName,enumMapps); } }catch(Exception e){ e.printStackTrace(); } } public static boolean isEnum(String fieldName){ boolean isEnum=false; HashSet enumMapps=EnumMappingHelper.getEnumMapping(fieldName,"src/com/metasoft/framework/si/eai/parse/enum.xml"); if(enumMapps!=null){ isEnum=true; } return isEnum; } //测试:读取enum.xml并输出 public static void main(String[] args) { MappingReader.parseEnumMappingXML("src/com/metasoft/framework/si/eai/parse/enum.xml"); Hashtable ems=EnumMappingHelper.getEnumMapping(); Iterator it=ems.keySet().iterator(); while(it.hasNext()){ String key=(String)it.next(); System.out.println(key); HashSet entry =(HashSet)ems.get(key); Iterator it2=entry.iterator(); while(it2.hasNext()){ EnumMapping em=(EnumMapping)it2.next(); System.out.println(" desc:"+em.getDesc()); System.out.println(" from:"+em.getFrom()); System.out.println(" to :"+em.getTo()); } } String fieldName="emaudit"; System.out.println("emaudit is enum? "+isEnum(fieldName)); if(isEnum(fieldName)){ HashSet enumMapps=EnumMappingHelper.getEnumMapping(fieldName,"src/com/metasoft/framework/si/eai/parse/enum.xml"); Iterator it2=enumMapps.iterator(); while(it2.hasNext()){ EnumMapping em=(EnumMapping)it2.next(); System.out.println(" desc:"+em.getDesc()); System.out.println(" from:"+em.getFrom()); System.out.println(" to :"+em.getTo()); } }else{ System.out.println("非枚举类型"); } } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |