广告项目:(五) 解析XMl-<1> dom4j解析
广告项目:(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