/** * */ package cn.baiweigang.qtaf.toolkit.util; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.TreeMap; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; /** * XML文件解析处理 * @author @<a href='http://weibo.com/bwgang'>bwgang</a> (bwgang@163.com)<br/> */ public class XmlUtil { private static TreeMap<String, String> resultMap; private static LogUtil log = LogUtil.getLogger(XmlUtil.class);// 日志记录 /** * xml文本串解析为Map表 * @param strXML * @return Map<String, String> */ public static Map<String, String> fomatXMLToMap(String strXML) { resultMap = new TreeMap<String, String>(); try { Document doc = DocumentHelper.parseText(strXML); Element root = doc.getRootElement(); AttriToMap(root); traverse(root); Dom2Map(doc); } catch (DocumentException e) { log.error(e.getMessage()); } return resultMap; } /** * 判断字符串是否为xml格式 * @param str * @return boolean xml可解析则返回true */ public static boolean isXmlText(String str) { try { @SuppressWarnings("unused") Document doc = DocumentHelper.parseText(str); doc=null; return true; } catch (DocumentException e) { } return false; } /** * 标签属性解析 * * @param e */ @SuppressWarnings("unchecked") private static void AttriToMap(Element e) { List<Attribute> tempList = e.attributes(); for (int i = 0; i < tempList.size(); i++) { // 属性的取得 Attribute item = tempList.get(i); MyPut(resultMap, item.getName(), item.getValue()); // resultMap.put(item.getName(), item.getValue()); } } /** * 标签属性解析,遍历 * * @param e */ @SuppressWarnings("unchecked") private static void traverse(Element e) { List<Element> list = e.elements(); for (int i = 0; i < list.size(); i++) { Element iter = list.get(i); AttriToMap(iter); traverse(iter); } } @SuppressWarnings("unchecked") private static void Dom2Map(Document doc) { if (doc == null) return; Element root = doc.getRootElement(); for (Iterator<Element> iterator = root.elementIterator(); iterator.hasNext();) { Element e = iterator.next(); List<Element> list = e.elements(); if (list.size() > 0) { Dom2Map(e); } else MyPut(resultMap, e.getName(), e.getText()); // resultMap.put(e.getName(), e.getText()); } } @SuppressWarnings("unchecked") private static void Dom2Map(Element e) { List<Element> list = e.elements(); if (list.size() > 0) { for (int i = 0; i < list.size(); i++) { Element iter = list.get(i); if (iter.elements().size() > 0) { Dom2Map(iter); } else { MyPut(resultMap, iter.getName(), iter.getText()); // resultMap.put(iter.getName(), iter.getText()); } } } else { MyPut(resultMap, e.getName(), e.getText()); // resultMap.put(e.getName(), e.getText()); } } /** * map增加key-value逻辑,如果已存在,则不覆盖,以&连接原值 * @param map * @param key * @param value */ private static void MyPut(TreeMap<String, String>map,String key,String value){ for (Entry<String, String> entry : map.entrySet()) { String keyOld = entry.getKey(); String valueOld = entry.getValue(); if (keyOld.equals(key)) { value=valueOld+"&"+value; break; } } map.put(key, value); } }