/**
* 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;
}