不多说了,直接上代码:
private staticObject xml2map(Element element) {
System.out.println(element);
Map map =newHashMap();
Map componentMap =newHashMap();
List elements = element.elements();
if(element.getName().endsWith("_Model")){
map.put(element.getName(),element.getText());
}
if(elements.size() ==0) {
//这边是非固定格式内容的获取
if(element.attributeCount() >0) {
for(inti =0; i < element.attributeCount(); i++) {
componentMap.put(element.attribute(i).getName(), element.attribute(i).getValue());
}
returncomponentMap;
}else{
map.put(element.getName(), element.getText());
}
if(!element.isRootElement()) {
returnelement.getText();
}
}else if(elements.size() ==1) {
map.put(elements.get(0).getName(),xml2map(elements.get(0)));
}else if(elements.size() >1) {
// 多个子节点的话就得考虑list的情况了,比如多个子节点有节点名称相同的
// 构造一个map用来去重
Map tempMap =newHashMap();
for(Element ele : elements) {
tempMap.put(ele.getName(), ele);
}
Set keySet = tempMap.keySet();
for(String string : keySet) {
Namespace namespace = tempMap.get(string).getNamespace();
List elements2 = element.elements(newQName(string, namespace));
// 如果同名的数目大于1则表示要构建list
if(elements2.size() >1) {
List list =newArrayList();
for(Element ele : elements2) {
list.add(xml2map(ele));
}
map.put(string, list);
}else{
// 同名的数量不大于1则直接递归去
map.put(string,xml2map(elements2.get(0)));
}
}
}
returnmap;
}
主要目的是吧xml解析成map的格式,方便数据的获取。其中parent需要单独解析!