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 map) {
if (!(node.getTextTrim().equals(""))) {
map.put(node.getName(), node.getText());
}
Iterator it = node.elementIterator();
while (it.hasNext()){
Element el = it.next();
nodesToMap(el,map);
}
}
/**
* 无脑解析
* @param xml
* @return
*/
public static Map getMap(String xml){
Document document =Dom4jUtil.getDocument(xml);
Element node = document.getRootElement();
Map map = new HashMap();
nodesToMap(node,map);
return map;
}
/**
* 解析多个相同兄弟节点
* @param elements
* @return
*/
public static List> nodeToList(Element elements ){
List> list = new ArrayList>();
List childElements = elements.elements();
for (Element element : childElements) {
Map map = new HashMap();
nodesToMap(element , map);
map.put(element.getName(), element.getText());
list.add(map);
}
return list;
}
/**
* 解析角色参数
* @param xml
* @return
*/
public static List> parseRoles(String xml){
Document document =Dom4jUtil.getDocument(xml);
Element root = document.getRootElement();
Element rolesElement = root.element("Value").element("Roles");
return nodeToList(rolesElement);
}
}