dom4j 指定遍历层数 指定从哪个节点开始遍历

2024-12-26 16:23:45
推荐回答(1个)
回答1:

/** 
 * wdm 
 * 将xml指定的节点名开始 
 * 转换为cdo 
 * @param strXML 
 * @return 
 */  
public static void xml2cdoByElementName(CDO cdoData, String strXML,String elementName,int floor){  
    try {  
/           int floor=1;//元素子节点循环几层  
        Document document = DocumentHelper.parseText(strXML);  
        Element root = document.getRootElement();  
        Element ele = root.element(elementName);//从根节点获取指定子集  
          
        List list = ele.elements();  
        if(list.size() > 0){  
            for (int i = 0;i < list.size(); i++) {  
                Element iter = list.get(i);  
                if(iter.elements().size()>0 && floor>0){//判断是否含有元素子节点  
                    elementChildNode2cdo(iter,cdoData,floor);//元素子节点循环几层  
                }else{//单节点  
                    cdoData.setStringValue(iter.getName(), iter.getTextTrim());  
                }  
            }  
        }  
    } catch (Exception e) {  
        log.error("xml转换为CDO异常:"+e.getMessage(), e);  
    }  
}  
  
/** 
 * wdm 
 * 和elementChildNode2cdo方法可以做循环递归 
 * @param element 
 * @param cdo 
 * @param floor 
 * @return 
 */  
@SuppressWarnings({ "unchecked" })  
private static CDO elementList2cdo(Element element, CDO cdo,int floor){  
    List list = element.elements();  
    if(list.size() > 0){  
        for (int i = 0;i < list.size(); i++) {  
            Element iter = list.get(i);  
            if(iter.elements().size()>0 && floor>0){//判断是否含有元素子节点  
                elementChildNode2cdo(iter,cdo,--floor);  
            }else{  
                cdo.setStringValue(iter.getName(), iter.getTextTrim());  
            }  
        }  
    }  
    return cdo;  
}  
  
/** 
 * wdm 
 * 循环多层子节点 
 * 和elementList2cdo方法可以做循环递归 
 * @param element 
 * @param cdo 
 * @return 
 */  
@SuppressWarnings({ "unchecked" })  
private static CDO elementChildNode2cdo(Element element, CDO cdo,int floor){  
    String listName=element.getName();  
    List childlist=element.selectNodes(element.getPath());//获取下级所有xpath子节点  
    CDO[] cdos=new CDO[childlist.size()];  
    if(cdo.exists(listName)){  
        return cdo;  
    }  
    if(childlist.size() > 0){  
        for (int i = 0;i < childlist.size(); i++) {  
            Element iter = childlist.get(i);  
            System.out.println(iter.getName());  
            cdos[i]=new CDO();  
            elementList2cdo(iter, cdos[i],--floor);  
        }  
    }  
    cdo.setCDOArrayValue(listName, cdos);  
    return cdo;  
}