dom4j解析xml

package com.gd.xml.parse;

import java.io.File;
import java.io.InputStream;

import org.dom4j.Document;
/**
 * xml解析接口
 * @author sandy
 *
 */
public interface XmlParser {

	/**
	 * 根据文档对象doc来解析xml
	 * @param doc
	 * @return
	 */
	public abstract XmlParser parseXml(Document doc);
	/**
	 * 根据传入的xml输入流解析xml
	 * @param is
	 * @return
	 */
	public abstract XmlParser parseXml(InputStream is);

	/**
	 * 根据传入的文件来解析xml
	 * @param xmlfile
	 * @return
	 */
	public abstract XmlParser parseXml(File xmlfile);

	/**
	 * 根据文件名来解析xml
	 * @param xmlfileName
	 * @return
	 */
	public abstract XmlParser parseXml(String xmlfileName);

}

 

/**
 * 
 */
package com.gd.xml.parse;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.XPath;
import org.dom4j.io.SAXReader;

/**
 * @author sandy
 *
 */
public class ConfigValuesXmlParse implements XmlParser {
	
	private Document document=null;
	private Map<String,ValueSet> valueSetMap=null;
	InputStream is=null;
	/* (non-Javadoc)
	 * @see com.gd.xml.parse.XmlParser#parseXml(org.dom4j.Document)
	 */
	@SuppressWarnings("unchecked")
	public ConfigValuesXmlParse() {
		valueSetMap=new TreeMap<String,ValueSet>();
	}
	public XmlParser parseXml(Document doc){
		this.document=doc;
		XPath path=doc.createXPath("/configValues//valueSet");
		List<Node> nodes=path.selectNodes(doc);
		for(Node valueSetNode:nodes){
			ValueSetDefaultImpl valueset=new ValueSetDefaultImpl();
			Element valueSetE=(Element)valueSetNode;
			valueset.setId(valueSetE.attributeValue("id"));
			valueset.setName(valueSetE.attributeValue("name"));
			path=valueSetE.createXPath(".//value");
			nodes=path.selectNodes(valueSetE);
			for(Node valueNode:nodes){
				Value value=new Value();
				Element valueE=(Element)valueNode;
				value.setDisplay(valueE.attributeValue("display"));
				value.setValue(valueE.attributeValue("value"));
				valueset.getValues().add(value);
			}
			this.valueSetMap.put(valueset.getId(), valueset);
		}
		path=this.document.createXPath("//dynamicValueSet");
		nodes=path.selectNodes(doc);
		for(Node dyNode:nodes){
			DynamicValueSet dyvalueSet=new DynamicValueSet();
			Element dyElement=(Element)dyNode;
			dyvalueSet.setId(dyElement.attributeValue("id"));
			dyvalueSet.setName(dyElement.attributeValue("name"));
			dyvalueSet.setSql(dyElement.getTextTrim());
			this.valueSetMap.put(dyvalueSet.getId(),dyvalueSet);
		}
		return this;
	}
	/* (non-Javadoc)
	 * @see com.gd.xml.parse.XmlParser#parseXml(java.io.InputStream)
	 */
	public XmlParser parseXml(InputStream is){
		SAXReader saxReader = new SAXReader();
		Document doc=null;
		try {
			doc = saxReader.read(is);
		} catch (DocumentException e) {
	      	//add log message .....................
			throw new RuntimeException(e.getMessage());
		}
		return this.parseXml(doc);
	}
	/* (non-Javadoc)
	 * @see com.gd.xml.parse.XmlParser#parseXml(java.io.File)
	 */
	public XmlParser parseXml(File xmlfile){
		try {
		is=new FileInputStream(xmlfile);
		} catch (FileNotFoundException e) {
			System.out.println("文件名字为:"+"["+xmlfile.getName()+"]"+"的文件找不到!");
			//e.printStackTrace();
		}
		return this.parseXml(is);
	}
	/* (non-Javadoc)
	 * @see com.gd.xml.parse.XmlParser#parseXml(java.lang.String)
	 */
	public XmlParser parseXml(String xmlfileName){
		ClassLoader clazzloader=Thread.currentThread().getContextClassLoader();
		is=clazzloader.getResourceAsStream(xmlfileName);
		return this.parseXml(is);
	}
	public static void main(String[] args) {
		XmlParser s=new ConfigValuesXmlParse();
		s.parseXml("configValues.xml");
	}
	/**
	 * @return the valueSetMap
	 */
	public Map<String, ValueSet> getValueSetMap() {
		return valueSetMap;
	}
}

  

/**
 * 
 */
package com.gd.xml.parse;

import java.util.List;

/**
 * @author sandy
 *
 */
public interface ValueSet{
	public List<Value> getValues();
}

 

/**
 * 
 */
package com.gd.xml.parse;

/**
 * @author sandy
 *
 */
public class Value {

	private String display=null;
	private String value=null;
	/**
	 * @return the display
	 */
	public String getDisplay() {
		return display;
	}
	/**
	 * @param display the display to set
	 */
	public void setDisplay(String display) {
		this.display = display;
	}
	/**
	 * @return the value
	 */
	public String getValue() {
		return value;
	}
	/**
	 * @param value the value to set
	 */
	public void setValue(String value) {
		this.value = value;
	}
	@Override
	public String toString() {
		String msg = "{";
		msg += "value[" + value + "], ";
		msg += "display[" + display + "]}";
		return msg;
	}

}

 

/**
 * 
 */
package com.gd.xml.parse;

import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import com.gd.xml.parse.util.QueryDao;

/**
 * @author sandy
 *
 */
public class DynamicValueSet  implements ValueSet{
	private String id=null;
	private String name=null;
	private String sql=null;
	private List<Value> values = new LinkedList<Value>();
	/**
	 * @return the id
	 */
	public String getId() {
		return id;
	}
	/**
	 * @param id the id to set
	 */
	public void setId(String id) {
		this.id = id;
	}
	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}
	/**
	 * @param name the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}
	/**
	 * @return the sql
	 */
	public String getSql() {
		return sql;
	}
	/**
	 * @param sql the sql to set
	 */
	public void setSql(String sql) {
		this.sql = sql;
	}
	/**
	 * @return the values
	 */
	public List<Value> getValues() {
		List<Value> list = new LinkedList<Value>();
		QueryDao dao = new QueryDao();
		Map<String, String> map = dao.findDisplayValueSet(sql);
		for (String key : map.keySet()) {
			Value val = new Value();
			val.setValue(key);
			val.setDisplay(map.get(key));
			list.add(val);
		}
		return list;
	}
}

 

/**
 * 
 */
package com.gd.xml.parse;

import java.util.LinkedList;
import java.util.List;

/**
 * @author sandy
 *
 */
public class ValueSetDefaultImpl implements ValueSet{

	private String id=null;
	private String name=null;
	private List<Value> values = new LinkedList<Value>();
	/**
	 * @return the id
	 */
	public String getId() {
		return id;
	}
	/**
	 * @param id the id to set
	 */
	public void setId(String id) {
		this.id = id;
	}
	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}
	/**
	 * @param name the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}
	/**
	 * @param values the values to set
	 */
	public void setValues(List<Value> values) {
		this.values = values;
	}
	/**
	 * @return the values
	 */
	public List<Value> getValues() {
		return values;
	}
	
}

 

/**
 * 
 */
package com.gd.xml.parse.util;

import java.util.HashMap;
import java.util.Map;

/**
 * @author sandy
 *
 */
public class QueryDao {

	public Map<String,String> findDisplayValueSet(String sql){
		Map<String,String> map=new HashMap<String,String>();
		/*
		 *<dynamicValueSet id="DGV001" name="卡BIN"><![CDATA[
		 *    SELECT code_vl,code_name FROM XXXXX 
		 * ]]></dynamicValueSet>
		 *  sql=SELECT code_vl,code_name FROM XXXXX 
		 */
		//根据从数据库中查询获得的数据,来构建map对象
		return map;
	}
}

 

<?xml version="1.0" encoding="UTF-8"?>
<configValues>
	<valueSet id="GV0001" name="交易地点">
		<value display="北京" value="01" />
		<value display="上海" value="02" />
		<value display="天津" value="03" />
		<value display="山东" value="04" />
		<value display="山西" value="05" />
	</valueSet>
	<valueSet id="GV0002" name="转账种类">
		<value display="活期转账" value="01" />
		<value display="定活互转" value="02" />
		<value display="向企业转账" value="03" />
		<value display="贷记卡转账" value="04" />
	</valueSet>
	<valueSet id="GV0003" name="卡种">
		<value display="信用卡" value="01" />
		<value display="借记卡" value="02" />
	</valueSet>
	<valueSet id="GV0004" name="卡别">
		<value display="易行卡" value="01" />
		<value display="CBA卡" value="02" />
		<value display="公务员卡" value="03" />
		<value display="学生卡" value="04" />
		<value display="婚庆卡" value="05" />
		<value display="社区卡" value="06" />
		<value display="青年卡" value="07" />
		<value display="车主卡" value="08" />
		<value display="理财卡" value="09" />
		<value display="交通卡" value="10" />
	</valueSet>
	<valueSet id="GV0005" name="客户等级">
		<value display="沃德客户" value="01" />
		<value display="交银理财客户" value="02" />
		<value display="普通客户" value="03" />
		<value display="VIP客户" value="04" />
	</valueSet>
	<valueSet id="GV0006" name="员工类型">
		<value display="行内员工" value="01" />
		<value display="非行内员工" value="02" />
	</valueSet>
	<valueSet id="GV0007" name="客户性别">
		<value display="女性" value="01" />
		<value display="男性" value="02" />
	</valueSet>
	<valueSet id="GV008" name="客户等级">
		<value display="普通客户" value="01" />
		<value display="VIP用户" value="02" />
	</valueSet>
	<dynamicValueSet id="DGV001" name="卡BIN"><![CDATA[
		SELECT code_vl,code_name FROM XXXXX 
		]]></dynamicValueSet>
   <dynamicValueSet id="DGV002" name="借记卡类型"><![CDATA[
		SELECT DCCDKD,DCCDNM FROM XXXXX
		]]></dynamicValueSet>	
   <dynamicValueSet id="DGV005" name="交易类型"><![CDATA[
		SELECT code_vl,code_name FROM XXXXX 
		]]></dynamicValueSet>	
</configValues>

 

/**
 * 
 */
package com.gd.xml.parse.test;
import java.util.List;
import java.util.Map;

import com.gd.xml.parse.*;

/**
 * @author sandy
 *
 */
public class Client {

	/**
	 * @param args
	 */
	public static String XML_PARSERFILENAME="configValues.xml";
	public static void main(String[] args) {
		Map<String, ValueSet> valuesetMap=init();
		fetchValues(valuesetMap);
	}

	private static void fetchValues(Map<String, ValueSet> valuesetMap) {
		ValueSet valset=valuesetMap.get("GV0001");
		ValueSetDefaultImpl  valuesetimpl=(ValueSetDefaultImpl)valset;
		System.out.print("ID:"+"["+valuesetimpl.getId()+"]"+"Name:["+valuesetimpl.getName()+"]"+"\n\r");
		List<Value> values=valuesetimpl.getValues();
		for(Value value:values){
			System.out.println("display:["+value.getDisplay()+"]"+"value:["+value.getValue()+"]");
		}
	}
	private static Map<String,ValueSet> init() {
		XmlParser parser=new ConfigValuesXmlParse();
		ConfigValuesXmlParse cfgparser=(ConfigValuesXmlParse)parser.parseXml(XML_PARSERFILENAME);
		return cfgparser.getValueSetMap();
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值