import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class Dom4jUtil { public final static Logger logger = LogManager.getLogger(Dom4jUtil.class); /** * String轉Document * @param xml * @return */ public static Document getDocument(String xml){ Document document = null; try { SAXReader reader = new SAXReader(); InputStream in = new ByteArrayInputStream(xml.getBytes("utf-8")); InputStreamReader strInStream = new InputStreamReader(in, "utf-8"); document = reader.read(strInStream); } catch (Exception e) { logger.error("XML不合法! :", e); } return document; } /** * 遞歸解析 * @param node * @param map */ public static void nodesToMap(Element node,Map<String,String> map) { if (!(node.getTextTrim().equals(""))) { map.put(node.getName(), node.getText()); } Iterator<Element> it = node.elementIterator(); while (it.hasNext()){ Element el = it.next(); nodesToMap(el,map); } } /** * 無腦解析 * @param xml * @return */ public static Map<String,String> getMap(String xml){ Document document =Dom4jUtil.getDocument(xml); Element node = document.getRootElement(); Map<String,String> map = new HashMap<String,String>(); nodesToMap(node,map); return map; } /** * 解析多個相同兄弟節點 * @param elements * @return */ public static List<Map<String,String>> nodeToList(Element elements ){ List<Map<String,String>> list = new ArrayList<Map<String,String>>(); List<Element> childElements = elements.elements(); for (Element element : childElements) { Map<String,String> map = new HashMap<String,String>(); nodesToMap(element , map); map.put(element.getName(), element.getText()); list.add(map); } return list; } /** * 解析角色參數 * @param xml * @return */ public static List<Map<String,String>> parseRoles(String xml){ Document document =Dom4jUtil.getDocument(xml); Element root = document.getRootElement(); Element rolesElement = root.element("Value").element("Roles"); return nodeToList(rolesElement); } }