Xml 解析

dom4j  分 dom解析 和 sax 两种解析 xml的 方式:

1 dom 解析:

将xml 下的指定节点 转换成map

public static List<Map<String, String>> xmlToList(String documentXml,String nodeString) throws DocumentException{
Document d = DocumentHelper.parseText(documentXml);
/**Node 中的 valueOf(xpath)  和 selectSingleNode(xpath)的中的方法直接获得节点值 
System.out.println(d.valueOf("//head/code").trim());
String ss = d.selectSingleNode("//message").getText();*/
//document 没有自己的查元素的方法
//element 有 xml-map
List<Node> list = d.selectNodes("//"+nodeString);
List<Map<String, String>> listReturn = new ArrayList<Map<String, String>>();
for(Node node : list){
Element e = (Element)node;
Iterator<?> it = e.elementIterator();
Map<String,String> map = new HashMap<String,String>();
while(it.hasNext()){
Element ee = (Element)it.next();
map.put(ee.getQualifiedName(), ee.getText());/**节点标签名称、节点标签值*/
}
listReturn.add(map);
}
return listReturn;
}

 接收的时候 如何将map 直接映射成业务bean?

public static List<Object> mapToBean(List<Map<?,?>> list,Object obj) throws Exception {
List<Object> listR = new ArrayList<Object>();
try{
Method[] methods = obj.getClass().getMethods();/**获得类对象的方法*/
    for(Map<?, ?> map : list){
    Object objNew = obj.getClass().newInstance();/**每次生成一个新的传入对象*/
    for(Method method : methods){
    String methodName = method.getName();
    if(methodName.startsWith("set")){/**对set方法操作*/
   String key =  methodName.substring(3).toLowerCase();/**截取set方法后的字符作为属性*/
    String value = (String)map.get(key);
    method.invoke(objNew, value);/**给新对象的该方法通过反射赋值*/
    }
    }
    listR.add(objNew);
    }
}catch(Exception e ){
throw new Exception("map 反射 bean 异常!");
}          
return listR;
 
}
原文地址:https://www.cnblogs.com/leonkobe/p/3317083.html