`
chennaid2
  • 浏览: 51201 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
  • b_l_east: 在主动模式下,如果有多个客户端,服务器对每一个客户端均使用20 ...
    ftp

广告项目:(5) 解析XMl-<1> dom4j解析

阅读更多

1:代码

 

package com.dvnchina.itv.advert.utils.xml;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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

import com..itv.advert.bean.STBVersionBean;
import com..itv.advert.model.Material;
import com..itv.advert.utils.config.DirectoryUtils;


/**
 * 获取素材配置文件
 * 
 * @author chennaidong
 *
 */
public class MaterialConfig {
	
	/**
	 * 素材配置文件
	 */
	private static File MaterialConfigureFile = new File(DirectoryUtils.getSerlvetContextPath()+"/WEB-INF/classes/materialConfig.xml");

	/**
	 * 素材配置DOM节点
	 */
	private static Document MaterialConfigureDom = null;
	
	/**
	 * 素材分类MAP集合 - 键值 -"kind"
	 */
	public static Map<String ,ArrayList<Material>> matkindMap = null;
	
	/**
	 *  素材类型MAP集合 - 键值 -"type" 
	 */
	public static Map<String ,ArrayList<Material>> matTypeMap = null;
	
	/**
	 * 	机顶盒版本MAP集合 - 键值 -"box" 
	 */
	public static HashMap<String, ArrayList<STBVersionBean>> boxVersionMap = null;
	

	
	/**
	 * 加载配置文件,初始化信息
	 */
	static{
		SAXReader reader = new SAXReader();
    	try {
    		MaterialConfigureDom = reader.read(MaterialConfigureFile);
			initData();
		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 初始化数据
	 */
	private static void initData(){
		if(MaterialConfigureDom == null){
			reloadConfig();
		}
		//开始加载
		initMaterialKind();
		initMaterialType();
		initBoxVersion();
	}
	
	/**
	 * 重新加载配置文件,初始化
	 */
	private static void reloadConfig(){
		SAXReader reader = new SAXReader();
    	try {
    		MaterialConfigureDom = reader.read(MaterialConfigureFile);
			initData();
		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 开始解析--素材分类
	 */
	@SuppressWarnings("unchecked")
	private static void initMaterialKind(){
		
		matkindMap  =  new HashMap<String, ArrayList<Material>>();
		String xpath="//kind";
		List<Element> nodes = MaterialConfigureDom.selectNodes(xpath);
		
		ArrayList<Material> materialKindList = new ArrayList<Material>();
		for(Element element:nodes){
			Material materialBean = new Material();
			String key = element.attributeValue("key");
			String name = element.attributeValue("name");
			materialBean.setId(Integer.valueOf(key));
			materialBean.setName(name);
			materialKindList.add(materialBean);
			
		}
		matkindMap.put("kind", materialKindList);
		
	}
	
	/**
	 * 开始解析--素材类型
	 */
	@SuppressWarnings("unchecked")
	static void initMaterialType(){
		matTypeMap  =  new HashMap<String, ArrayList<Material>>();
		String xpath2="//type";
		List<Element> node2s = MaterialConfigureDom.selectNodes(xpath2);
		
		ArrayList<Material> materialTypeList = new ArrayList<Material>();
		for(Element element:node2s){
			Material materialBean = new Material();
			String key = element.attributeValue("key");
			String name = element.attributeValue("name");
			materialBean.setId(Integer.valueOf(key));
			materialBean.setName(name);
			materialTypeList.add(materialBean);
			
		}
		matTypeMap.put("type", materialTypeList);
		
	}
	
	/**
	 * 开始解析--机顶盒版本
	 */
	@SuppressWarnings("unchecked")
	static void initBoxVersion(){
		
		boxVersionMap  =  new HashMap<String, ArrayList<STBVersionBean>>();
		String xpath2="//box";
		List<Element> node2s = MaterialConfigureDom.selectNodes(xpath2);
		
		ArrayList<STBVersionBean> versionList = new ArrayList<STBVersionBean>();
		for(Element element:node2s){
			STBVersionBean version = new STBVersionBean();
			String key = element.attributeValue("key");
			String name = element.attributeValue("version");
			version.setId(key);
			version.setName(name);
			versionList.add(version);
			
		}
		
		boxVersionMap.put("box", versionList);
	}
}

 

 2:xml的文件

<?xml version="1.0" encoding="UTF-8"?>
<config>
	<material>
			<kind key="0" name="视频" />
			<kind key="1" name="图片" />
			<kind key="2" name="文字" />
			<kind key="3" name="压缩包" />
			
			<type key="0" name="标清" />
			<type key="1" name="高清" />
			
			<box key="1" name="a" version="标清版本" />
			<box key="2" name="b" version="普通高清版本" />
			<box key="3" name="c" version="云高清版本" />
			
	</material>
	
	<position>
			<positionbean key="0" name="开机广告位" />
			<positionbean key="1" name="切换频道广告位" />
			<positionbean key="2" name="切换音量广告位" />
			<positionbean key="3" name="频道列表广告位" />
			<positionbean key="4" name="频道轮询广告位" />
			<positionbean key="5" name="收藏频道广告位" />
			
	</position>
	
</config>

 

 

 

3:使用解析后的数据

 private static final Map<String, ArrayList<Material>> mKindMap  = MaterialConfig.matkindMap;
 private static final Map<String, ArrayList<Material>> mTypeMap  = MaterialConfig.matTypeMap;

4:依赖的解析引擎

通过dom4j 想解析xml,必须依赖一个“解析引擎”,jaxen-1.1-beta-9.jar

   

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics