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("非枚举类型");
}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值