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