`
lgd_java2eye
  • 浏览: 189617 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

dom4j解析xml

    博客分类:
  • java
阅读更多
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();
	}
}

 

分享到:
评论

相关推荐

    dom4j解析xml详解

    ### DOM4J解析XML详解 #### 一、DOM4J简介与特性 DOM4J是一个由dom4j.org开发的开源XML解析包,专为Java平台设计,它不仅支持DOM、SAX和JAXP标准,还巧妙地融入了Java集合框架,使其成为Java开发者在处理XML数据时...

    使用 dom4j 解析 XML

    使用 dom4j 解析 XML dom4j 解析 XML dom4j解析xml

    DOM4J 解析XML

    **DOM4J解析XML** DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活、高效且功能丰富的API,使得XML的读取、创建、修改和查询变得简单易行。DOM4J的主要特点包括对XPath的支持、事件驱动的解析、以及与...

    java dom4j解析xml

    Java DOM4J解析XML是一种常见的处理XML文档的技术,它提供了灵活且高效的API,使得开发者能够方便地读取、写入、修改以及操作XML文件。DOM4J是Java中一个非常强大的XML处理库,它结合了DOM、SAX和JDOM的优点,同时也...

    dom4j解析xml文件(增删改查)

    在“dom4j解析xml文件(增删改查)”这个主题中,我们将深入探讨如何使用DOM4J来实现XML文档的四种基本操作:增加元素、删除元素、更新元素内容以及查询元素。 首先,让我们了解DOM4J的基本用法。在解析XML文件时,...

    dom4j解析xml实例

    **DOM4J解析XML实例详解** 在Java编程中,处理XML文档是一项常见的任务。DOM4J是一个非常流行的、强大的Java XML API,它提供了灵活且高效的方式来解析、创建、修改XML文档。本文将深入探讨如何使用DOM4J进行XML...

    dom4j 解析xml实例

    在这个实例中,我们将深入探讨如何使用DOM4J解析XML文件,并通过`Dom4jTest1.java`这个示例程序来理解其工作原理。 首先,我们需要了解XML(Extensible Markup Language)是一种标记语言,常用于存储和传输数据。...

    dom4j解析XML

    本人自己研究的解析方法,主要用dom4j解析XML文件,进而获取里面的信息

    dom4j解析xml,利用反射机制

    通过这种方式,我们可以利用DOM4J解析XML文件,同时借助Java反射机制将解析结果动态地映射到自定义的Java类中。这在处理XML数据时提供了很大的灵活性,尤其在需要将XML数据与业务对象关联时,反射机制显得尤为重要。

    dom4j解析xml文件代码示例

    在本示例中,我们将深入探讨如何使用DOM4J解析XML文件,以`CacheInit.java`作为我们的核心代码示例,并参考`emailTemplateConfig.xml`作为实际操作的对象。 首先,让我们了解XML(eXtensible Markup Language)。...

    java dom4j 解析xml的例子,可用

    1. **DOM4J解析XML**:DOM4J通过创建一个可操作的树形结构来表示XML文档,这棵树称为文档对象模型。解析XML时,DOM4J首先读取XML文件并构建一个节点结构,然后你可以通过API遍历和修改这个结构。例如,你可以通过...

    使用dom4j解析XML

    【使用dom4j解析XML】 dom4j是一个强大的开源XML框架,它提供了处理XML文档的各种功能,包括解析、创建、修改等。相比W3C DOM API,dom4j的优势在于其内置的XPath支持,允许更方便地定位和操作XML文档中的节点。 *...

    dom4j 解析写入xml

    1、xml文档解析 2、 dom4j解析xml 3、实现xml文件解析 xml字符串解析 xml MAP键值对解析 4、实现xml写入与生成文件

    dom4j解析XML所需要的jar包

    为了在Java项目中使用DOM4J解析XML,你需要将这两个jar文件(dom4j-1.6.1和jaxen-1.1-beta-7.jar)添加到你的类路径(classpath)中。这可以通过在IDE中配置构建路径,或者在命令行中指定 `-cp` 参数来完成。一旦...

    dom4j解析xml,连接oracle数据库

    在本实例中,我们将深入探讨如何使用DOM4J解析XML,并利用这些数据连接Oracle数据库进行数据操作。 首先,让我们了解DOM4J的基本用法。DOM4J的主要类包括`Document`、`Element`、`Attribute`和`Namespace`。`...

    dom4j解析XML所需jar包

    2. **XML解析**:DOM4J支持多种解析方式,包括SAX(Simple API for XML)和DOM。SAX是基于事件的解析,适用于处理大文件;DOM则将整个XML文档加载到内存,适合小规模或内存允许的情况。DOM4J还提供了StAX(Streaming...

    dom4j解析xml字符串实例

    dom4j解析xml字符串实例

Global site tag (gtag.js) - Google Analytics