java 读取xml文件

来源:互联网 发布:人工智能 mp4 编辑:程序博客网 时间:2024/06/15 20:21

最近在写 一个 动态导入 Excel 的功能,其中利用了 dom4j 读取 xml 文件进行验证,poi 读取Excel 数据,reflect 反射生成 队对象,

接下来 先写java -dom4j 读取 xml 文件开始:

第一步:使用Dom4j开发,需下载dom4j相应的jar文件

        1.官网下载: http://www.dom4j.org/dom4j-1.6.1/

         2.dom4j是sourceforge.NET上的一个开源项目,因此可以到http://sourceforge.Net/projects/dom4j下载其最新版.

第二步:配置xml 文件用于读取

<?xml version="1.0" encoding="UTF-8"?><root><!-- 规则信息:BusinessRule --><improtExcel id="com.test.data.BusinessRule" name="ruleImport"><mapping type="String" excelTitle="规则名称" property="name" required="true"></mapping><mapping type="String" excelTitle="bps范围" property="bps_range" required="false"></mapping><mapping type="String" excelTitle="pps范围" property="pps_range" required="false"></mapping><mapping type="String" excelTitle="协议范围" property="prot" required="true"></mapping><mapping type="String" excelTitle="源端口" property="src_port" required="false"></mapping><mapping type="String" excelTitle="目的端口" property="dest_port" required="false"></mapping><mapping type="String" excelTitle="时间资源" property="time_res_id" required="true"></mapping><mapping type="String" excelTitle="是否启用" property="is_on" required="true"></mapping><mapping type="String" excelTitle="是否为黑名单" property="rosterFlag" required="true"></mapping><mapping type="String" excelTitle="源ip范围" property="srcIpRange" required="false"></mapping><mapping type="String" excelTitle="目的ip范围" property="dstIpRange" required="false"></mapping></improtExcel></root>

第三步:读取xml

package test.util.excelutil;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.venustech.tsoc.cupid.Cupid;import com.venustech.tsoc.cupid.nba.util.excelImportUtil.ExcelMappingBean;import com.venustech.tsoc.cupid.nba.util.excelImportUtil.StringUtil;/** * 规则导入  初始化映射 工具类 * @author Administrator * */public class RuleImportMappingUtil {private static RuleImportMappingUtil singleton = null;private Map<String, MappingBean> mappingBeanMap = new HashMap<String, MappingBean>();private Map<String, List<String>> titlesMap = new HashMap<String, List<String>>();public static RuleImportMappingUtil getInstance(){if(singleton == null){singleton = getSyncInstance();}return singleton;}/** * 线程安全 获取实例 * @return */private static synchronized RuleImportMappingUtil getSyncInstance(){return new RuleImportMappingUtil();}private RuleImportMappingUtil(){initExcelInfo();};/** * 初始化 参数 读取 xml 文件,初始化 信息 */private void initExcelInfo(){String webinfo = Cupid.getContextValueAs(String.class, "conf.dir");String fileName = webinfo + "/nta/util/importExcelMappingRule.xml";SAXReader reader = new SAXReader();Document document;try {document = reader.read(new File(fileName));Element root = document.getRootElement();List<Element> excelEles = root.elements();for(Element excelEle : excelEles){String id = excelEle.attributeValue("id");String alias = excelEle.attributeValue("name");List<Element> mappingEles = excelEle.elements();List<String> titles = new ArrayList<String>();for(Element mappingEle : mappingEles){MappingBean excelMapping = new MappingBean();excelMapping.setExcelTitle(mappingEle.attributeValue("excelTitle"));excelMapping.setProperty(mappingEle.attributeValue("property"));excelMapping.setRequired(Boolean.valueOf(mappingEle.attributeValue("required")));if(excelMapping.isRequired()){titles.add(excelMapping.getExcelTitle());}excelMapping.setType(mappingEle.attributeValue("type"));if("map".equals(excelMapping.getType())){excelMapping.setMapName(mappingEle.elementText("mapName"));excelMapping.setMapDefaultValue(mappingEle.elementText("mapDefaultValue"));//setDictionaryMapMap(excelMapping.getMapName());}else if("db".equals(excelMapping.getType())){excelMapping.setClassName(mappingEle.elementText("className"));excelMapping.setAnnoName(mappingEle.elementText("annoName"));excelMapping.setMethodName(mappingEle.elementText("methodName"));}if(StringUtil.strIsNull(alias)){mappingBeanMap.put(id + "_" + excelMapping.getExcelTitle(), excelMapping);}else{mappingBeanMap.put(id + "$" + alias + "_" + excelMapping.getExcelTitle(), excelMapping);}}if(!titles.isEmpty()){if(StringUtil.strIsNull(alias)){titlesMap.put(id, titles);}else{titlesMap.put(id + "$" + alias + "_", titles);}}}} catch (DocumentException e) {e.printStackTrace();} }/** *  * @param packagePath  包路径 * @param name    总文件名  约定 * @param excelTitle  列的标题 * @return */public MappingBean  getMappingBean(String packagePath , String name , String excelTitle){if(name == null || name.equals("")){return mappingBeanMap.get(packagePath + "_" + excelTitle);}else{return mappingBeanMap.get(packagePath  + "$" + name + "_" + excelTitle);}}/** * 获取 所有的 字段值-中文含义 * @param packagePath * @param name * @return */public List<String>  getAllTitles(String packagePath , String name ){if(name == null || name.equals("")){return titlesMap.get(packagePath);}else{return titlesMap.get(packagePath + "$" + name);}}}


当然 这种方式 是遍历读取,你也可以指定 节点 读取:

1.获取文档的根节点.        Element root = document.getRootElement();      2.取得某个节点的子节点.        Element element=node.element(“四大名著");      3.取得节点的文字          String text=node.getText();      4.取得某节点下所有名为“csdn”的子节点,并进行遍历.         List nodes = rootElm.elements("csdn");            for (Iterator it = nodes.iterator(); it.hasNext();) {           Element elm = (Element) it.next();        // do something   }       5.对某节点下的所有子节点进行遍历.            for(Iterator it=root.elementIterator();it.hasNext();){                Element element = (Element) it.next();               // do something    }      6.在某节点下添加子节点        Element elm = newElm.addElement("朝代");      7.设置节点文字.  elm.setText("明朝");      8.删除某节点.//childElement是待删除的节点,parentElement是其父节点  parentElement.remove(childElment);      9.添加一个CDATA节点.Element contentElm = infoElm.addElement("content");contentElm.addCDATA(“cdata区域”);  

未完待续。。。。。


1 0
原创粉丝点击