zoukankan      html  css  js  c++  java
  • dom4j 通用解析器,解析成List<Map<String,Object>>

    import java.io.InputStream;
    import java.util.Iterator;
    import java.util.LinkedHashMap;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Map;
    
    import org.dom4j.Attribute;
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    
    public class Dom4JXmlConvert {
    
    	/**
    	 * dom4j解析xml
    	 * 
    	 * @param in
    	 * @return
    	 */
    	@SuppressWarnings("unchecked")
    	public static List<Map<String, Object>> convert(InputStream in) {
    		long start = System.currentTimeMillis();
    		List<Map<String, Object>> lst = new LinkedList<>();
    		SAXReader saxReader = new SAXReader();
    		try {
    			Document document = saxReader.read(in);
    			// 获取根节点
    			Element root = document.getRootElement();
    			// 迭代根节点下的所有子节点
    			Iterator<Element> itertor = root.elementIterator();
    			Element eleNext = null;
    			// 遍历子节点
    			while (itertor.hasNext()) {
    				eleNext = itertor.next();
    				Map<String, Object> tmp = parseElement(eleNext);
    				lst.add(tmp);
    			}
    			System.out.println("本次解析XML耗时:" + (System.currentTimeMillis() - start));
    		} catch (DocumentException e) {
    			e.printStackTrace();
    		}
    		return lst;
    	}
    
    	@SuppressWarnings({ "unchecked" })
    	private static Map<String, Object> parseElement(Element ele) {
    		Map<String, Object> map = new LinkedHashMap<String, Object>();
    
    		// 遍历节点属性
    		Iterator<Attribute> iterAttr = ele.attributeIterator();
    
    		// 遍历时的中间遍量
    		Attribute attr = null;
    
    		// 遍历
    		while (iterAttr.hasNext()) {
    			attr = iterAttr.next();
    			map.put(attr.getQName().getName(), attr.getValue());
    		}
    
    		// 如果该节点没有子节点,则添加标签名和标签中间的字符到map,如果还有子节点,递归遍历
    		Iterator<Element> itertor = ele.elementIterator();
    		if (!itertor.hasNext()) {
    			map.put(ele.getName(), ele.getStringValue());
    		} else {
    			List<Map<String, Object>> lst = new LinkedList<>();
    			while (itertor.hasNext()) {
    				lst.add(parseElement(itertor.next()));
    			}
    			map.put(ele.getName(), lst);
    		}
    		return map;
    	}
    }
    

      测试解析spring的配置文件,自定义文件,均可正常解析

  • 相关阅读:
    hihocoder 1049 后序遍历
    hihocoder 1310 岛屿
    Leetcode 63. Unique Paths II
    Leetcode 62. Unique Paths
    Leetcode 70. Climbing Stairs
    poj 3544 Journey with Pigs
    Leetcode 338. Counting Bits
    Leetcode 136. Single Number
    Leetcode 342. Power of Four
    Leetcode 299. Bulls and Cows
  • 原文地址:https://www.cnblogs.com/swtjavaspace/p/8568944.html
Copyright © 2011-2022 走看看