`
彭自荣
  • 浏览: 15655 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

xml文件相关操作

阅读更多
enum.xml
<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("非枚举类型");
		}
	}
}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics